SahrulRamadhani29/portfolio

Ram Digital Store

Private source

A digital product store with guest checkout, stock reservations, QRIS payments, invoices, and product delivery.

SoloFull-stack digital store, stock reservations, QRIS reconciliation, admin tools, and testing
Private source code
Ram Digital Store poster showing three original mobile screens: home, the catalogue section on home, and the checkout form.

Digital products. A simple shopping flow. Browse the catalogue on home, review your items, and complete the checkout form. Home and the checkout form before creating an order

Application preview Home / Catalogue on home / Checkout formEnlarge

My contribution highlights

Read all 8 contribution modules
Contents · 8 contribution modules

Main workflow

6 steps

Guest purchases connect product selection, stock reservations, QRIS confirmation, and digital fulfilment. Provider status guides payment handling.

  1. 01Choose and order products

    1. Catalogue and cart

      Buyer
    2. Create an order and reservation

      Store backend
  2. 02Verify payment

    1. Pay the order invoice

      Buyer & QRIS provider
    2. Reconcile status

      Store backend
  3. 03Fulfil and deliver

    1. Fulfil by product type

      System & admin
    2. Invoice and follow-up

      Buyer & admin
Process details & branches
  1. Catalogue and cartBuyer

    Choose products, quantities, and multiple items in one cart. Checkout does not require an account.

  2. Create an order and reservationStore backend

    The system checks availability, reserves stock, and connects items to a parent order and order page access.

  3. Pay the order invoiceBuyer & QRIS provider

    The QRIS invoice is linked to the order. Status arrives through webhooks and provider checks.

  4. Reconcile statusStore backend

    Callback verification and provider status determine the next step, including when callbacks arrive late.

    What is the payment outcome?

    • Valid payment. Proceed to digital product fulfilment.
    • Expired without payment. Release the reservation so stock becomes available again.
    • Late or mismatched payment. Use reconciliation and admin recovery rather than automatically treating it as failed.
  5. Fulfil by product typeSystem & admin

    A valid order unlocks account product details/access, or follows the user account upgrade path for that purchase type.

  6. Invoice and follow-upBuyer & admin

    Invoices and emails are linked to the order. Admins handle resending or recovery if delivery encounters issues.

Stock reservations, expiry, and provider status are connected through reconciliation. Fulfilment follows valid payment and the order type.

CASE_STUDY.mdProduct & my contributions

About Ram Digital Store

Ram Digital Store is a digital product store with a catalogue, cart, guest purchases, QRIS payments, fulfilment, invoices, and an admin dashboard. It distinguishes account product purchases from user account upgrade services and connects stock with payment status.

I developed the frontend, backend, database, payment integrations, digital delivery, and tests. The technical focus includes consistent stock reservations and handling transaction status changes.

My contributions

Catalogue, cart, and guest checkout

I built catalogue, category, and product detail pages, quantity selection, and multi-item carts. I implemented guest checkout and token-based order pages so buyers can follow their purchases. Cart items connect to a parent order to unify payment status and order outputs.

Product management and admin operations

I developed product, category, stock, order, and promotional popup management. I added CSV/XLSX imports, stock exports, and server-side order search. Dashboard chart loading is deferred so those components do not add to the admin page’s initial load.

Stock reservations and order expiry

I worked on available/sold stock calculations, checkout reservations, and reservation release when payment is not completed. I also separated fulfilment paths for account products and user account upgrades. Import validation helps keep stock data consistent with the processes that consume it.

QRIS integration and webhook verification

I connected payment providers, including the KlikQRIS integration, to order invoices. I checked callbacks/webhooks and confirmed status with the provider before updating orders. This connects external payment information with product access in the application.

Payment reconciliation and recovery

I handled late callbacks, transactions not yet found, and payments confirmed after local order expiry. I added reconciliation and admin recovery to handle timing differences between polling, callbacks, and expiry jobs against the relevant order status.

Digital delivery, invoices, and email

I connected valid payments to fulfilment, detail disclosure, invoices, and email delivery through Brevo. I improved invoice resending from cart parent orders, email retries, and admin delivery controls. Product detail availability follows the application’s access duration resolver.

Database and admin access control

I migrated runtime storage to PostgreSQL and removed the previous Supabase runtime dependency. I worked on admin authentication, same-origin mutation protection, Turnstile validation, and payment checks. I also connected object storage, image processing, and spreadsheets to store operations.

Transaction scenario testing

I wrote Vitest tests for payment verification, race conditions, expiry, recovery, and access duration resolution. These scenarios check relationships between orders, stock, and provider status when processes arrive at different times, including multi-item carts and fulfilment linked to parent orders.

Fields & core technologies

Project fields

Full-stack WebBackend & APIData & DatabasesSoftware Quality

Core technologies

Next.jsTypeScriptPostgreSQLKlikQRISPakasirCloudflare R2VitestTailwind CSS

73 commits in the last 12 months

All branches
NovDecJanFebMarAprMayJunJulAugSeptOctNov
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Hover over a square or focus it to see the date.
LessMore
Current streak0 days
Longest streak in this period2 days
Active days in this period19 days
Verified data · updates scheduled hourly.
How it is counted · 1 repo · 2 branch

My authored commits reachable from all remote branches at sync time. Each SHA is counted once, even across branches or forks. Merge commits are excluded. Dates use the author timestamp in Western Indonesia Time (UTC+7), rather than push time. The current streak remains active when the last commit was yesterday and today is still in progress.

This calendar covers commits across all branches. Its totals may differ from GitHub’s contribution calendar, which includes other activity types and follows its own branch rules. This calendar covers only the project you are viewing.

Contribution history

73 of my non-merge commits · All branches · Data as of 3 November 2026.

Back to all projects