Foundation Tech Consulting
Project scoping, estimates, and client workspaces.
Live consulting website, guided project briefs, and client and owner workspaces. The current release uses human review for pricing.
Overview.
Foundation Tech Consulting is my software consulting business. The website explains the work I take on—custom websites, workflow automation, API integrations, SaaS applications, and technical consulting—and gives prospective clients a clear way to get started.
The product goes beyond a marketing site. A private client portal turns an initial idea into a structured project brief, with guided questions, an explicit scope review, and a downloadable document. An owner workspace keeps incoming requests, scope revisions, follow-up, and operational work in one place.
Screens & workflows.
Application screens and development prototypes. Select a capture for a closer look.
Explore a service and start a conversation
- Choose a business need in the service directory.
- Open a detailed service page and explore its illustrative workflow.
- Carry the selected service into the contact form.
- Send a message without creating an account; continue the discussion by email.
Turn an idea into a project brief
- Sign in through an email link and create a project in the client portal.
- Answer guided questions about goals, users, workflows, integrations, and constraints.
- Review the proposed MVP, correct assumptions, and confirm the exact draft revision.
- Download a scope-only PDF and return later to the project's document history.
Review and follow up as the owner
- Open the authorized owner workspace and review incoming project requests.
- Read the client's answers alongside scope, assumptions, and unresolved questions.
- Prepare revisions and track follow-up without overwriting issued documents.
- Use the confirmed brief as the starting point for a personal discovery and pricing conversation.
Rehearse the whole journey safely
- Open a sample client or sample owner in the development environment.
- Use fictional projects to exercise questions, confirmations, documents, and owner review.
- Switch roles within the isolated sample workspace to review both sides of a request.
- Reset the sample workspace without contacting an email service, database, or paid AI provider.
Inside the build.
Explore the components, their boundaries, and the decisions behind them.
Nuxt renders the public experience and private workspaces. Prerendered marketing routes are served as assets, while Nitro/H3 handlers run on Cloudflare Workers. Server-managed Supabase authentication, Postgres transactions, private Storage, and durable document/email jobs form the application boundary.
Public site and private workspaces
Deliver fast public pages while keeping account and owner features behind separate route imports.
- Ten public marketing routes have canonical metadata, social previews, and structured data; private routes stay out of the sitemap.
- Portal, estimator, owner, provider, and PDF code stay outside the initial marketing browser graph.
- Interactive landscape artwork uses deferred loading, bounded animation work, reduced-motion behavior, and static fallbacks.
Design decisions & tradeoffs.
Hybrid rendering with a small public bundle
Marketing pages are prerendered, and portal/owner/provider code loads with the routes that need it. The interactive landscape is deferred until the visitor approaches it.
The tradeoffThe build and cache policy are more deliberate than a single static app, but private workflows do not impose their full JavaScript cost on the public homepage.
Confirmation creates a durable record
A client confirms a specific draft revision. Database-side guards preserve the resulting scope and document history, while subsequent work creates a new revision.
The tradeoffRevision checks add conflict and retry states to the interface, but prevent a later edit from silently changing what a client previously approved.
Retry side effects without replacing history
Document jobs use leases, stable object paths, byte digests, and explicit completion records. A retry can verify and adopt an existing PDF after an interrupted response.
The tradeoffMore job state must be managed, but partial failures can recover without regenerating conflicting copies of an issued document.
Separate a working release from optional automation
The released guided flow produces a scope-only brief for human review. AI interview and monetary-estimation adapters are implemented behind independent server-side gates.
The tradeoffThere is less automation at launch, but users receive a predictable brief without treating an unevaluated model or unapproved price catalog as a binding quote.
Technical stack.
Application
- Nuxt 4
- Vue 3
- TypeScript
- Vue Router
- CSS
Hybrid rendered marketing pages, client portal, owner workspace, theme controls, and interactive service demonstrations.
Runtime and API
- Cloudflare Workers
- Nitro
- H3
- Wrangler
- Zod
Server-only request handlers, input validation, session/cookie handling, environment-specific builds, and scheduled work.
Identity and persistence
- Supabase Auth
- Supabase SSR
- PostgreSQL
- Row-level security
- Supabase Storage
Email-link identity, client isolation, a private owner registry, transactional scope confirmation, and private documents.
Documents and communication
- pdf-lib
- fontkit
- Resend
- Svix
- SHA-256
Versioned PDF rendering, document integrity checks, email notifications, and webhook verification; provider-dependent features have explicit configuration gates.
Quality and delivery
- Vitest
- Playwright
- pgTAP
- Lighthouse
- ESLint
- Prettier
Contract and security tests, real database behavior, responsive journeys, public-route audits, performance checks, and formatting.
Optional interview adapter
- OpenAI Responses API
- Zod
- Capability flags
A server-only AI interview adapter exists, with validated outputs and timeouts. Production guided scoping does not depend on it, and activation requires separate evaluation approval.