Complete operational provenance for TrustSeal (trustseal.asquaresolution.com) from concept through production. Build phases, infrastructure changes, auth incidents, payment integration, deployment milestones, and failure resolutions — consolidated as a queryable operational record.
This is the consolidated operational record for TrustSeal — a complete timeline of every significant infrastructure event, failure, migration, and deployment from initial concept through current production state. It is the authoritative product memory document for this system.
Product concept defined — AI trust verifier as extension of ScamCheck domain signal concept to full website profiling
Technology stack selected: React + Vite + Tailwind + Firebase + Gemini + Razorpay + GitHub Pages
Firebase project initialized (ass-youtube-agent shared project). Firestore data model defined before any UI: users/{uid}/checks, quota, subscription collections
Data model first — prevents schema-UI mismatch
React + Vite scaffold, Tailwind CSS configured, GitHub repository created, dist/.git worktree set up for gh-pages deployment
Firebase Auth implemented — email/password + Google OAuth, onAuthStateChanged session management, Firestore security rules deployed
Core trust check flow — URL input, signal collection (SSL, domain age, HTTP headers, redirect chain), Gemini Cloud Function first pass
Gemini Cloud Function deployed to Firebase — initial prompt without embedded schema, output inconsistent
FAILURE: Firebase Cloud Functions crashing on every production invocation. Firebase default Node 18 runtime incompatible with Gemini SDK ESM exports. Local Firebase emulator ran Node 22, masking the issue entirely
FIX: firebase.json updated — runtime: nodejs22. functions/package.json engines field updated. Functions redeployed. All invocations stable
Gemini prompt structured with embedded JSON schema, signal taxonomy section, and edge case handling. Structured output reliability improved to production-acceptable level
Full trust check flow working end-to-end: URL submission → signal collection → Gemini analysis → structured verdict → Firestore write → client display
Razorpay subscription tier architecture designed: free (10 checks/month quota) + premium (unlimited, ₹149–299/month). Firestore subscription document structure defined
Razorpay integration built: createSubscription Cloud Function, checkout modal initialization, webhook handler Cloud Function with signature verification
Firestore onSnapshot listener for real-time tier unlock — premium upgrade reflected in UI without page reload
FAILURE: Razorpay test/live key mode mismatch. Client key: rzp_test_. Server key: rzp_live_. Checkout modal opened successfully but no webhook fired. Payment appeared to complete; server received nothing
FIX: Both keys switched to consistent mode (test). Rule established: both keys must carry same mode prefix simultaneously. Mode switch to live will be done as atomic operation at go-live
Full payment flow working in test mode: free tier quota enforcement, checkout modal, webhook handler, premium tier unlock, Firestore subscription document written correctly
Custom domain DNS planning: trustseal.asquaresolution.com CNAME to GitHub Pages. DNS records created in Hostinger.
GitHub Pages custom domain configured — trustseal.asquaresolution.com pointing to gh-pages branch. HTTPS certificate provisioning begins after DNS propagation (~30 min)
FAILURE: Firebase Auth session lost on every page refresh on the custom domain. Login completed successfully, page refresh returned to login screen. UNAUTHORIZED_DOMAIN in network tab — custom domain not in Firebase Authorized Domains list
FIX: Firebase Console → Authentication → Settings → Authorized Domains → added trustseal.asquaresolution.com. Session persistence immediately restored. Resolution time: 2 minutes
Razorpay keys switched to live mode — both client and server keys updated atomically to rzp_live_ prefix. Production payment flow verified with real transaction
trustseal.asquaresolution.com fully live: HTTPS active, Firebase Auth stable, Gemini analysis working, Razorpay live payments accepting
TrustSeal integrated into A Square Solutions ecosystem: header nav links to asquaresolution.com, footer ecosystem block added (ScamCheck, AI Execution Lab)
GA4 cross-domain measurement configured — cookie_domain set to asquaresolution.com. TrustSeal sessions now stitched with main site sessions in GA4
TrustSeal footer ecosystem block deployed to gh-pages. Cross-property navigation active from all TrustSeal pages
TrustSeal architecture build case study published — full build narrative, failure timeline, architecture decisions documented
TrustSeal operations review log published — deployment health, Razorpay sandbox integration, Firebase auth stability noted
TrustSeal system document published — canonical operational reference with architecture, Firestore schema, Cloud Functions table, payment flow, risk table
TrustSeal product memory log (this document) published — complete operational timeline consolidated
| Dimension | State |
|---|---|
| Deployment | GitHub Pages gh-pages branch, manual dist/ git push |
| Custom domain | trustseal.asquaresolution.com — HTTPS active |
| Firebase Auth | Email/password + Google OAuth — session stable |
| Authorized domains | trustseal.asquaresolution.com + github.io testing subdomain |
| Cloud Functions | Node 22 runtime (explicit) — all invocations stable |
| Gemini | Structured output with embedded schema + validation |
| Razorpay | Live keys active — subscription payment flow operational |
| GA4 | Scoped to production environment — cross-domain session stitching |
| Firestore | Quota enforcement + subscription state management operational |
Four production failures documented and resolved:
nodejs22 explicit in firebase.json| Risk | Status |
|---|---|
| Gemini free tier quota exhaustion | Monitored — upgrade to paid tier when usage warrants |
| Firebase cold start latency (2–4s) | Mitigated — multi-stage loading UX in place |
| Razorpay webhook delivery failure | Low probability — Razorpay retry is automatic |
| Firebase Auth token refresh failure | Mitigated — custom domain in Authorized Domains list |