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
| Release | Name | Main Modules | Demoable Value |
|---|---|---|---|
| 10.0 | Print Foundation (A4 and A5) | Document/Print | Print a quote on A4 and a payment slip on A5 from the browser and from the phone |
| 10.1 | E-mail Notifications & Stock Alerts | Notification, Inventory | Customers and staff get e-mails at every hand-off; low stock notifies inventory staff |
| 10.2 | Public Website & User Guide | viettechno-website, vietgara-help, Contact request API | A 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
printingpackage; 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_logrow 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 onviettechno.comandwww.viettechno.com. It is the company’s site, with one landing page per product:/vietgaranow,/<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 toPOST /api/v1/public/contact-requestson 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_requestsand 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.
- The browser posts to the site’s own
- User guide (FR-WEB-03) —
vietgara-help. Astro Starlight with MDX and Pagefind search, onvietgara-help.viettechno.com. It is for garage owners and their staff, written in Vietnamese first withenready.- 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.cssonly, 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.comshows the home page and the VietGara page in Vietnamese and English; the demo request form creates acontact_requestsrow 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.comcovers 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.