User Flow Mickael Rutembya · Flow Atlas

Product detail & purchase

/ressources/produits/<category>/<slug>/

Visitor reviews a product, selects a plan, enters identity and consent, and is sent to Stripe Checkout.

User intent

What the visitor is trying to do

« I want to review the product details, understand what I am buying, and complete the purchase securely. »

Entry points

ElementDestination
Products listing product card/ressources/produits/<category>/<slug>/
Category filter product card/ressources/produits/<category>/<slug>/
Product CTA "Voir l'offre"/ressources/produits/<category>/<slug>/

Flow

Adjacent routes — click a node to open it.userflow
flowchart LR Start(["Visitor arrives"]) --> ProductDetail["/ressources/produits/<category>/<slug>/ (Product detail)"] ProductDetail -->|Free product| Entitlement["/acces/<token>/"] ProductDetail -->|Payable| CheckoutForm["Checkout organism: plan + identity + consent"] CheckoutForm --> POST["POST /paiement/produit/<slug>/"] POST --> Stripe["Stripe Checkout session"] Stripe -->|Pays| Return["/paiement/<ref>/retour/"] Stripe -->|Cancels| Cancel["/paiement/<ref>/annule/"] Return -->|Webhook settled| Entitlement Return -->|Pending webhook| Pending["Confirmation en cours"] Cancel --> End(["Flow ended"]) Pending --> End click ProductDetail "https://mickael-umt.com/ressources/produits/frameworks/agentic-ai-framework/" "Open Product" click Entitlement "https://mickael-umt.com/acces/<token>/" "Open Entitlement" click CheckoutForm "https://mickael-umt.com/ressources/produits/frameworks/agentic-ai-framework/" "Open Checkout" click POST "https://mickael-umt.com/paiement/produit/agentic-ai-framework/" "POST Checkout" click Stripe "https://checkout.stripe.com" "Open Stripe" click Return "https://mickael-umt.com/paiement/<ref>/retour/" "Open Return" click Cancel "https://mickael-umt.com/paiement/<ref>/annule/" "Open Cancelled" click Pending "https://mickael-umt.com/paiement/<ref>/retour/" "Open Pending" click End "https://mickael-umt.com/ressources/produits/" "Back to Products"

Screen inventory

IDScreenUser task
P0Product detailReview product, plan, price, and deliverables
P1Checkout formSelect plan, enter identity and consent
P2Stripe CheckoutPay securely via Stripe hosted page
P3Return pageSee payment outcome and entitlements
P4Cancel pageSee cancellation notice; no charge
P5EntitlementDownload files or access session resources

Flow scenario

Scenario D1

Consultant buys a downloadable framework

Trigger

  • Visitor opens a product detail from the products listing
  • Reviews the framework description and plan options
  • Clicks the checkout CTA

Experience

  1. The product detail shows the framework title, description, plan (single or team), price, and CTA.
  2. The visitor selects a plan, enters identity (name, email, company), and gives consent for terms and data processing.
  3. The checkout form posts to /paiement/produit/<slug>/.
  4. The view creates a Payment row, freezes the terms version, and creates a Stripe Checkout session.
  5. The visitor is redirected to the Stripe hosted page.
  6. After payment, Stripe redirects to the return page; the webhook settles the payment and grants entitlements.
  7. The buyer receives a personal delivery link (/acces/<token>/) to download the PDF.

Trust and safety rules

  • All pricing is public and deterministic; no coefficient reaches the browser.
  • The calculator access gate blocks disposable and non-routable domains.
  • Payment pages are blocked by robots.txt and carry no editorial SEO value.
  • No card data touches the server; Stripe hosts the checkout page.
  • Amount authority: server reads ProductPrice.amount_eur; browser input is never charged.
  • Terms freeze: terms_version is stamped at payment creation.
  • Settlement authority: only the signed Stripe webhook writes PAID.
  • Throttling: max 10 pending payments per email per hour.

Interaction rules

  • Mobile fields use 16 px text to avoid browser zoom.
  • Reduced-motion preferences disable nonessential transitions.
  • Language toggle switches FR/EN across all strings.

Result states

StateWhat the visitor seesWhat happens next
BrowsingProduct detail with plan and priceVisitor initiates checkout
ProcessingStripe Checkout hosted pageBuyer pays or cancels
PaidReturn page with entitlementsBuyer downloads or accesses resources
CancelledCancelled notice; no chargeVisitor may retry
PendingConfirmation en coursWebhook settles asynchronously