Skip to content

RELEASE PLAN — PHASE 10

VietGara — Quoting & Printing, and the public website and user guide

Version 10.1 — October 10, 2026 · Cloud: Google Cloud Platform (GCP) · Backend: Go

The job catalogue, hidden consumables and stock reservation are in Release 7.3, before the open launch. The previous Phase 5 “Scale & Advanced Analytics” is now Phase 15. Thermal receipt printing is deliberately later, in Phase 14.

1. Introduction

By the end of Phase 9 the product is production-ready and open for launch, and Phases 5, 6 and 7 have delivered the garage’s legal identity, the part catalogue with units, inventory documents with cost, and the job catalogue. Phase 10 uses them:

  • Everyone: print any document in A4 or A5 from the web or the phone, with the garage’s legal header.
  • Customers and staff: are told by e-mail at every hand-off, and inventory staff are told when a part runs low.

Releases 10.0 and 10.1 run on infrastructure VietGara already operates (Mailjet e-mail, push from Release 11.0); no third-party contract is needed. Release 10.2 adds the public face of the product: a sales site and a user guide, hosted as static sites (ADR-013).

2. Overview of the 3 Releases

ReleaseNameMain ModulesDemoable Value
10.0Print Foundation (A4 and A5)Document/PrintPrint a quote on A4 and a payment slip on A5 from the browser and from the phone
10.1E-mail Notifications & Stock AlertsNotification, InventoryCustomers and staff get e-mails at every hand-off; low stock notifies inventory staff
10.2Public Website & User Guideviettechno-website, vietgara-help, Contact request APIA visitor reads about VietGara, requests a demo and finds the how-to guide; the request reaches support by e-mail

3. Release Details

Release 10.0 — Print Foundation (A4 and A5)

  • Print model (FR-DOC-04). One stable JSON “print model” per document type: quote, repair order, settlement, payment voucher, stock receipt and stock issue voucher. Every renderer works from the model, never from database rows, and the model carries the garage’s legal header (Release 5.0), the billing party (Release 5.1) and the units (Release 6.0).
  • Template registry. A template is (document type, paper size, locale, version). Versions are immutable; each printed document records the version it used so a reprint matches the original. The built-in templates are written in Go behind a renderer interface that a later HTML renderer (Phase 14) can sit behind.
  • Paper sizes. A4 (210 x 297 mm) is the default for every document. A5 (148 x 210 mm) is offered for payment vouchers, settlement slips and short quotes. The garage chooses the default template and paper size per document type in its settings.
  • Printing (FR-DOC-05).
    • Web: the PDF opens in the browser’s print dialog.
    • Mobile apps: the OS print and share sheet (AirPrint, Android print) through the Flutter printing package; the printer is whatever the device already knows, including network printers.
    • Printing is logged on the document (who, when, how many times) and a reprint carries a “copy” mark when the garage chooses so.
  • Not an invoice. Documents are named payment slip, voucher, quote and repair order. A tax invoice appears only with e-invoicing in Phase 16 (FR-DOC-10).
  • Definition of Done: the same quote prints correctly on A4 from the browser and from a phone to a network printer; a payment voucher prints on A5; the settlement uses the billing company’s name and tax ID; changing a template version leaves earlier reprints identical.

Release 10.1 — E-mail Notifications & Stock Alerts

  • Notification Service (FR-NOT-05). Consume the existing domain events and send transactional e-mails in the recipient’s language:
    • customer: quote ready; vehicle ready for pick-up; settlement receipt with its PDF attached; payment received;
    • garage staff: quote approved or rejected; settlement fully paid.
    • Retries with backoff and a bounded count (NFR-AV-05), a notification_log row for every send with its status, and bounce and complaint handling from the Mailjet webhooks.
    • Each garage chooses which e-mails are sent and the sender name. Customers can opt out of non-essential e-mails through a link in each e-mail (consent per the Compliance Checklist).
  • Low-stock alerts (FR-INV-04). The per-part threshold (in the part’s base unit) triggers an e-mail and a push notification to inventory staff, once per crossing and not on every movement.
  • Frontend (web console and owner app): notification settings per garage, the log view, and the threshold on the part screen.
  • Definition of Done: following one vehicle through quote → approval → repair → settlement → payment sends the expected e-mails, each logged once; turning a type off in the garage settings stops it; a part falling below its threshold notifies inventory staff once.

Release 10.2 — Public Website & User Guide

Two static sites, each in its own repository, both built with Astro and deployed from CI on every merge to master with a preview per pull request (ADR-013). Neither holds tenant data.

  • Company homepage and product page (FR-WEB-01) — viettechno-website. Astro, Tailwind CSS and TypeScript, served on viettechno.com and www.viettechno.com. It is the company’s site, with one landing page per product: /vietgara now, /<product> later. The first version has:
    • the home page and the VietGara page (what it does for a garage, features by role, screenshots, plans and prices kept in the site’s content files, so that the build never depends on the backend);
    • customer stories and a blog or news section (content collections, Markdown);
    • a Vietnamese site with an English version under /en, hreflang, a sitemap, Open Graph images and structured data (Organization, SoftwareApplication);
    • the privacy policy and the terms of use, which a public sign-up and the contact form’s consent text need (Compliance Checklist, Release 8.0).
  • Contact and demo request (FR-WEB-02). A form (name, garage name, phone, e-mail, message, consent) with Cloudflare Turnstile as the anti-spam check.
    • The browser posts to the site’s own /contact (a Pages Function, same origin), which forwards the request server to server to POST /api/v1/public/contact-requests on the API host. The API host stays free of browser CORS rules (Deployment Architecture Section 2.2).
    • The backend validates the request, stores it in contact_requests and e-mails [email protected] through the Notification module. There is no screen for the requests in this release; support works from the mailbox.
    • The page also shows the phone number, a Zalo link and the support e-mail address, so that a visitor can leave the form out.
  • User guide (FR-WEB-03) — vietgara-help. Astro Starlight with MDX and Pagefind search, on vietgara-help.viettechno.com. It is for garage owners and their staff, written in Vietnamese first with en ready.
    • Organized by task, not by screen: set up the garage, invite staff, create a quote, take a vehicle in, repair, settle and take payment, manage stock, read the reports.
    • Screenshots are produced by a script from the shared test data (Phase 4) on staging, so that a release can refresh them in one command.
    • Every web console page and every mobile app screen links to its guide page (“Help” opens vietgara-help.viettechno.com/<path>); the link set is kept in each app’s configuration.
  • Shared design. Both sites use the colour and type tokens of @vietgara/web-ui (styles.css only, no React components), so the product pages look like the product. The company pages that carry no product look use the same tokens until a company brand exists.
  • Delivery. GitHub Actions per repository: format, lint, type check, build, link check, and an accessibility check on the built pages; deploy to the static host on master. DNS records are CNAMEs in the company zone at PA Vietnam. The sites are not part of the backend release train and do not share its version tags.
  • Definition of Done:
    • viettechno.com shows the home page and the VietGara page in Vietnamese and English; the demo request form creates a contact_requests row and an e-mail at [email protected] on staging;
    • a request with a failed anti-spam check or a missing consent is refused and stores nothing;
    • vietgara-help.viettechno.com covers the daily flow Quote → Repair → Settlement with screenshots, search finds a Vietnamese phrase typed without diacritics, and the owner web’s Help link opens the matching page;
    • both sites pass the link check and reach 90 or more in Lighthouse performance and accessibility on mobile.

4. Dependency Diagram

flowchart TD
  P9(["Phase 9 complete"]) --> R100["Release 10.0<br/>Print foundation A4/A5"]
  P9 --> R101["Release 10.1<br/>E-mail notifications + stock alerts"]
  P9 --> R102["Release 10.2<br/>Public website + user guide"]
  R100 --> DONE(["Phase 10 complete"])
  R101 --> DONE
  R102 --> DONE

The three releases touch different modules and can be built in parallel. Release 10.2 only needs the open launch (Phase 9) for the product facts it describes. Its guide pages follow the features that exist: a page for a later feature (Phase 11 onward) is added with the release that ships it, as part of that release’s Definition of Done.