Skip to content
Merged

Dev #11

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
997db23
feat(checkout): add M-Pesa (STK push) payment to headless checkout
Elias-3817 Jun 29, 2026
94045c6
fix(tenant): resolve tenant config inside the cache boundary
Elias-3817 Jun 29, 2026
bfcff39
feat(checkout): show Lipa na M-Pesa logo on the M-Pesa method
Elias-3817 Jun 30, 2026
b3e3c4e
fix(checkout): harden M-Pesa polling, phone normalization.
Elias-3817 Jun 30, 2026
c40af3b
fix(checkout): make M-Pesa timeout screen honest about payment status
Elias-3817 Jun 30, 2026
d28f5fc
refactor(checkout): use base field and button components for M-Pesa UI
Elias-3817 Jun 30, 2026
cbdb276
Merge pull request #8 from truehostcloud/feat/mpesa-headless-checkout
willymwai Jun 30, 2026
0e15f65
fix(homepage): read tenant homepage from design.layout.homepage
Elias-3817 Jul 2, 2026
ecfccca
feat(branding): default to OLITT logo and footer attribution
Elias-3817 Jul 2, 2026
b747e2b
test(homepage): guard tenant homepage resolution and section merge
Elias-3817 Jul 2, 2026
91b5ed1
fix(footer): address review on OLITT attribution and link safety
Elias-3817 Jul 2, 2026
1e254da
Merge pull request #9 from truehostcloud/fix/homepage-config-resolver
willymwai Jul 2, 2026
c9f4df2
fix(branding): render the OLITT SVG logo in the header
Elias-3817 Jul 2, 2026
ffbec1e
Merge pull request #10 from truehostcloud/fix/storefront-svg-logo-render
willymwai Jul 2, 2026
8ef2987
fix(next-image): add olitt.com and olitt.net to next/image remote pat…
Elias-3817 Jul 3, 2026
f7d6cad
Merge pull request #12 from truehostcloud/fix/next-image-s3-olitt-host
willymwai Jul 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions messages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@
"confirmingPayment": "Ihre Zahlung wird bestätigt...",
"selectPaymentMethod": "Bitte wählen Sie eine Zahlungsmethode.",
"manualPaymentInfo": "Sie erhalten Zahlungsanweisungen nach der Bestellung.",
"mpesaPhoneLabel": "M-Pesa-Telefonnummer",
"mpesaPhonePlaceholder": "07XX XXX XXX",
"mpesaPhoneHint": "Geben Sie die Safaricom-Nummer ein, um die M-Pesa-Zahlungsaufforderung zu erhalten.",
"mpesaPhoneInvalid": "Geben Sie eine gültige Safaricom-Nummer ein, z. B. 0712 345 678.",
"mpesaAwaitTitle": "Prüfen Sie Ihr Telefon",
"mpesaAwaitBody": "Wir haben eine M-Pesa-Zahlungsaufforderung an Ihr Telefon gesendet. Geben Sie Ihre M-Pesa-PIN ein, um die Zahlung abzuschließen.",
"mpesaTimeoutTitle": "Zahlung noch nicht bestätigt",
"mpesaTimeoutBody": "Ihre Bestellung wurde aufgegeben. Wenn Sie Ihre M-Pesa-PIN bereits eingegeben haben, kann die Bestätigung einige Minuten dauern. Sie können diese Seite gefahrlos schließen.",
"mpesaContinueShopping": "Weiter einkaufen",
"mpesaPaymentFailed": "Die M-Pesa-Zahlung wurde nicht abgeschlossen. Bitte versuchen Sie es erneut.",
"failedToCreatePayment": "Zahlung konnte nicht erstellt werden. Bitte versuchen Sie es erneut.",
"placeOrder": "Bestellung aufgeben",
"noPaymentRequired": "Keine Zahlung erforderlich — Ihre Bestellung ist vollständig abgedeckt.",
Expand Down
10 changes: 10 additions & 0 deletions messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@
"confirmingPayment": "Confirming your payment...",
"selectPaymentMethod": "Please select a payment method.",
"manualPaymentInfo": "You will receive payment instructions after placing your order.",
"mpesaPhoneLabel": "M-Pesa phone number",
"mpesaPhonePlaceholder": "07XX XXX XXX",
"mpesaPhoneHint": "Enter the Safaricom number to receive the M-Pesa payment prompt.",
"mpesaPhoneInvalid": "Enter a valid Safaricom number, e.g. 0712 345 678.",
"mpesaAwaitTitle": "Check your phone",
"mpesaAwaitBody": "We've sent an M-Pesa payment request to your phone. Enter your M-Pesa PIN to complete the payment.",
"mpesaTimeoutTitle": "Payment not yet confirmed",
"mpesaTimeoutBody": "Your order has been placed. If you already entered your M-Pesa PIN, it can take a few minutes to confirm. You can close this page safely.",
"mpesaContinueShopping": "Continue Shopping",
"mpesaPaymentFailed": "The M-Pesa payment was not completed. Please try again.",
"failedToCreatePayment": "Failed to create payment. Please try again.",
"placeOrder": "Place Order",
"noPaymentRequired": "No payment required — your order is fully covered.",
Expand Down
10 changes: 10 additions & 0 deletions messages/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@
"confirmingPayment": "Confirmando tu pago...",
"selectPaymentMethod": "Por favor selecciona un método de pago.",
"manualPaymentInfo": "Recibirás instrucciones de pago después de realizar tu pedido.",
"mpesaPhoneLabel": "Número de teléfono M-Pesa",
"mpesaPhonePlaceholder": "07XX XXX XXX",
"mpesaPhoneHint": "Ingresa el número de Safaricom para recibir la solicitud de pago de M-Pesa.",
"mpesaPhoneInvalid": "Ingresa un número de Safaricom válido, p. ej. 0712 345 678.",
"mpesaAwaitTitle": "Revisa tu teléfono",
"mpesaAwaitBody": "Hemos enviado una solicitud de pago M-Pesa a tu teléfono. Ingresa tu PIN de M-Pesa para completar el pago.",
"mpesaTimeoutTitle": "Pago aún no confirmado",
"mpesaTimeoutBody": "Tu pedido se ha realizado. Si ya ingresaste tu PIN de M-Pesa, la confirmación puede tardar unos minutos. Puedes cerrar esta página de forma segura.",
"mpesaContinueShopping": "Seguir comprando",
"mpesaPaymentFailed": "El pago de M-Pesa no se completó. Inténtalo de nuevo.",
"failedToCreatePayment": "No se pudo crear el pago. Inténtalo de nuevo.",
"placeOrder": "Realizar pedido",
"noPaymentRequired": "No se requiere pago — tu pedido está completamente cubierto.",
Expand Down
10 changes: 10 additions & 0 deletions messages/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@
"confirmingPayment": "Confirmation de votre paiement...",
"selectPaymentMethod": "Veuillez sélectionner un mode de paiement.",
"manualPaymentInfo": "Vous recevrez les instructions de paiement après avoir passé votre commande.",
"mpesaPhoneLabel": "Numéro de téléphone M-Pesa",
"mpesaPhonePlaceholder": "07XX XXX XXX",
"mpesaPhoneHint": "Saisissez le numéro Safaricom pour recevoir la demande de paiement M-Pesa.",
"mpesaPhoneInvalid": "Saisissez un numéro Safaricom valide, par ex. 0712 345 678.",
"mpesaAwaitTitle": "Vérifiez votre téléphone",
"mpesaAwaitBody": "Nous avons envoyé une demande de paiement M-Pesa sur votre téléphone. Saisissez votre code PIN M-Pesa pour finaliser le paiement.",
"mpesaTimeoutTitle": "Paiement pas encore confirmé",
"mpesaTimeoutBody": "Votre commande a été passée. Si vous avez déjà saisi votre code PIN M-Pesa, la confirmation peut prendre quelques minutes. Vous pouvez fermer cette page en toute sécurité.",
"mpesaContinueShopping": "Continuer mes achats",
"mpesaPaymentFailed": "Le paiement M-Pesa n'a pas abouti. Veuillez réessayer.",
"failedToCreatePayment": "Échec de la création du paiement. Veuillez réessayer.",
"placeOrder": "Passer la commande",
"noPaymentRequired": "Aucun paiement requis — votre commande est entièrement couverte.",
Expand Down
10 changes: 10 additions & 0 deletions messages/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@
"confirmingPayment": "Potwierdzanie płatności...",
"selectPaymentMethod": "Proszę wybrać metodę płatności.",
"manualPaymentInfo": "Otrzymasz instrukcje płatności po złożeniu zamówienia.",
"mpesaPhoneLabel": "Numer telefonu M-Pesa",
"mpesaPhonePlaceholder": "07XX XXX XXX",
"mpesaPhoneHint": "Wprowadź numer Safaricom, aby otrzymać monit o płatność M-Pesa.",
"mpesaPhoneInvalid": "Wprowadź prawidłowy numer Safaricom, np. 0712 345 678.",
"mpesaAwaitTitle": "Sprawdź telefon",
"mpesaAwaitBody": "Wysłaliśmy prośbę o płatność M-Pesa na Twój telefon. Wprowadź swój PIN M-Pesa, aby dokończyć płatność.",
"mpesaTimeoutTitle": "Płatność jeszcze niepotwierdzona",
"mpesaTimeoutBody": "Twoje zamówienie zostało złożone. Jeśli wprowadziłeś już PIN M-Pesa, potwierdzenie może potrwać kilka minut. Możesz bezpiecznie zamknąć tę stronę.",
"mpesaContinueShopping": "Kontynuuj zakupy",
"mpesaPaymentFailed": "Płatność M-Pesa nie została zrealizowana. Spróbuj ponownie.",
"failedToCreatePayment": "Nie udało się utworzyć płatności. Spróbuj ponownie.",
"placeOrder": "Złóż zamówienie",
"noPaymentRequired": "Płatność nie jest wymagana — zamówienie jest w pełni pokryte.",
Expand Down
18 changes: 18 additions & 0 deletions next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ const nextConfig: NextConfig = {
},
images: {
qualities: [25, 50, 75, 85, 100],
dangerouslyAllowSVG: true,
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
Comment thread
Elias-3817 marked this conversation as resolved.
dangerouslyAllowLocalIP: true, // Allow localhost images in development
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
Expand All @@ -42,6 +44,12 @@ const nextConfig: NextConfig = {
hostname: "localhost",
pathname: "/rails/active_storage/**",
},
{
protocol: "http",
hostname: "127.0.0.1",
port: "9000",
pathname: "/media/**",
},
Comment thread
Elias-3817 marked this conversation as resolved.
{
protocol: "https",
hostname: "**.vendo.dev",
Expand All @@ -67,6 +75,16 @@ const nextConfig: NextConfig = {
hostname: "**.olitt.store",
pathname: "/rails/active_storage/**",
},
{
protocol: "https",
hostname: "**.olitt.com",
pathname: "/media/**",
},
{
protocol: "https",
hostname: "**.olitt.net",
pathname: "/media/**",
},
{
protocol: "https",
hostname: "images.unsplash.com",
Expand Down
11 changes: 11 additions & 0 deletions public/olitt-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading