Reduce Transfer storage price to GHS 0.15 per GB per month.
Deploy Ladill Transfer / deploy (push) Successful in 40s
Deploy Ladill Transfer / deploy (push) Successful in 40s
Updates config default, env examples, and removes hardcoded GHS 1.00 copy on the dashboard. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+1
-1
@@ -37,7 +37,7 @@ BILLING_API_KEY_TRANSFER=
|
||||
IDENTITY_API_URL=https://ladill.com/api
|
||||
IDENTITY_API_KEY_TRANSFER=
|
||||
|
||||
TRANSFER_PRICE_PER_GB_MONTH=1.00
|
||||
TRANSFER_PRICE_PER_GB_MONTH=0.15
|
||||
TRANSFER_MAX_FILE_BYTES=524288000
|
||||
TRANSFER_MAX_FILES=20
|
||||
TRANSFER_DEFAULT_RETENTION_DAYS=30
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Standalone app for **secure file sharing** at `transfer.ladill.com` — upload files,
|
||||
get a QR code + share link, control retention, track downloads. Storage bills at
|
||||
**GHS 1.00/GB/month** from the platform UserWallet.
|
||||
**GHS 0.15/GB/month** from the platform UserWallet.
|
||||
|
||||
Public scans stay at `ladill.com/q/<code>`. The platform forwards transfer codes
|
||||
to this app (`TransferQrForwarder` on the monolith).
|
||||
|
||||
@@ -61,7 +61,7 @@ class AccountController extends Controller
|
||||
|
||||
$storageBytes = (int) $activeTransfers->sum('storage_bytes');
|
||||
$storageGb = round($storageBytes / (1024 * 1024 * 1024), 2);
|
||||
$pricePerGb = (float) config('transfer.price_per_gb_month', 1.0);
|
||||
$pricePerGb = (float) config('transfer.price_per_gb_month', 0.15);
|
||||
$monthlyTotalGhs = round($activeTransfers->sum(fn (Transfer $transfer) => $transfer->monthlyCostGhs()), 2);
|
||||
|
||||
return view('qr.account.billing', [
|
||||
|
||||
@@ -70,7 +70,7 @@ class AfiaController extends Controller
|
||||
->whereNotNull('expires_at')
|
||||
->whereBetween('expires_at', [now(), now()->addDays(7)])
|
||||
->count(),
|
||||
'storage_price_per_gb_month_ghs' => number_format((float) config('transfer.price_per_gb_month', 1.0), 2),
|
||||
'storage_price_per_gb_month_ghs' => number_format((float) config('transfer.price_per_gb_month', 0.15), 2),
|
||||
];
|
||||
|
||||
if ($account->public_id) {
|
||||
|
||||
@@ -31,7 +31,7 @@ class FilesController extends Controller
|
||||
'files' => $files,
|
||||
'storageBytes' => (int) $storageBytes,
|
||||
'storageGb' => round($storageBytes / (1024 * 1024 * 1024), 2),
|
||||
'pricePerGb' => (float) config('transfer.price_per_gb_month', 1.0),
|
||||
'pricePerGb' => (float) config('transfer.price_per_gb_month', 0.15),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ class OverviewController extends Controller
|
||||
}
|
||||
|
||||
$storageGb = round($storageBytes / (1024 * 1024 * 1024), 2);
|
||||
$monthlyEstimateGhs = round($storageGb * (float) config('transfer.price_per_gb_month', 1.0), 2);
|
||||
$monthlyEstimateGhs = round($storageGb * (float) config('transfer.price_per_gb_month', 0.15), 2);
|
||||
|
||||
return view('transfer.dashboard', [
|
||||
'activeCount' => $activeCount,
|
||||
|
||||
@@ -42,7 +42,7 @@ class TransferController extends Controller
|
||||
return view('transfer.transfers.create', [
|
||||
'defaultRetentionDays' => (int) config('transfer.default_retention_days', 30),
|
||||
'maxFiles' => (int) config('transfer.max_files_per_transfer', 20),
|
||||
'pricePerGb' => (float) config('transfer.price_per_gb_month', 1.0),
|
||||
'pricePerGb' => (float) config('transfer.price_per_gb_month', 0.15),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,6 @@ class Transfer extends Model
|
||||
|
||||
public function monthlyCostGhs(): float
|
||||
{
|
||||
return round($this->storageGb() * (float) config('transfer.price_per_gb_month', 1.0), 2);
|
||||
return round($this->storageGb() * (float) config('transfer.price_per_gb_month', 0.15), 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ class AfiaService
|
||||
|
||||
private function transferSystemPrompt(string $ctx): string
|
||||
{
|
||||
$pricePerGb = number_format((float) config('transfer.price_per_gb_month', 1.0), 2);
|
||||
$pricePerGb = number_format((float) config('transfer.price_per_gb_month', 0.15), 2);
|
||||
|
||||
return <<<PROMPT
|
||||
You are Afia, the assistant inside Ladill Transfer (transfer.ladill.com).
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
return [
|
||||
// GHS per GB per month of retention (see qr-suite-decomposition.md §7.3).
|
||||
'price_per_gb_month' => (float) env('TRANSFER_PRICE_PER_GB_MONTH', 1.0),
|
||||
'price_per_gb_month' => (float) env('TRANSFER_PRICE_PER_GB_MONTH', 0.15),
|
||||
|
||||
// Max single-file upload size (bytes). Default 500 MB.
|
||||
'max_file_bytes' => (int) env('TRANSFER_MAX_FILE_BYTES', 524288000),
|
||||
|
||||
@@ -37,7 +37,7 @@ BILLING_API_KEY_TRANSFER=
|
||||
IDENTITY_API_URL=https://ladill.com/api
|
||||
IDENTITY_API_KEY_TRANSFER=
|
||||
|
||||
TRANSFER_PRICE_PER_GB_MONTH=1.00
|
||||
TRANSFER_PRICE_PER_GB_MONTH=0.15
|
||||
TRANSFER_MAX_FILE_BYTES=524288000
|
||||
TRANSFER_MAX_FILES=20
|
||||
TRANSFER_DEFAULT_RETENTION_DAYS=30
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<div class="rounded-2xl border border-indigo-100 bg-indigo-50/60 p-6">
|
||||
<p class="text-xs font-medium uppercase tracking-wide text-indigo-600">Wallet balance</p>
|
||||
<p class="mt-1.5 text-2xl font-semibold text-slate-900">{{ $fmt($balanceMinor) }}</p>
|
||||
<p class="mt-2 text-sm text-slate-600">Storage is billed at GHS 1.00 per GB per month from your Ladill wallet.</p>
|
||||
<p class="mt-2 text-sm text-slate-600">Storage is billed at GHS {{ number_format((float) config('transfer.price_per_gb_month', 0.15), 2) }} per GB per month from your Ladill wallet.</p>
|
||||
<div class="mt-4 space-y-3">
|
||||
<a href="{{ route('transfer.transfers.create') }}" class="flex items-center justify-between rounded-xl border border-white bg-white px-4 py-3 text-sm hover:bg-indigo-50/50">
|
||||
<span class="font-medium text-slate-700">New transfer</span>
|
||||
|
||||
Reference in New Issue
Block a user