From f305b5d4c82450527c113e9b40ec8eae2be94900 Mon Sep 17 00:00:00 2001 From: SebastianLevano Date: Tue, 26 May 2026 20:03:25 -0500 Subject: [PATCH 1/2] chore(web): set page title/description + live demo URL in README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - index.html: real "CloudDocs AI …" + meta description (was the default "web") for the public demo. - README: live demo URL (https://cloud-docs-theta.vercel.app), status → MVP live (Phases 0–6), roadmap phase 6 done. --- README.md | 36 +++++++++++++++++------------------- apps/web/src/index.html | 6 +++++- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 81f7fb7..4a0956e 100644 --- a/README.md +++ b/README.md @@ -15,17 +15,15 @@ costs cents per month at idle. --- -> **Status — Phase 5 complete; Phase 6 (production deploy) in progress.** -> The full MVP is live on AWS (`sa-east-1`): JWT auth + multi-tenant orgs, -> document upload to S3 via presigned URLs, an async AI pipeline (extract → +> **Status — MVP live (Phases 0–6 complete).** +> The full MVP is deployed: the Angular SPA on Vercel talks to a serverless API +> on AWS (`sa-east-1`) backed by Neon Postgres. Features: JWT auth + multi-tenant +> orgs, document upload to S3 via presigned URLs, an async AI pipeline (extract → > summarize → classify with `gpt-4o-mini`), full-text search and a metrics -> dashboard. The Angular SPA covers auth, upload, document detail with live AI -> results, search/filters and the dashboard. Phase 6 wires the frontend to -> Vercel for a public demo URL. +> dashboard. Next up (Phase 7+): embeddings + semantic search, RAG chat, folders, +> Stripe billing and OCR. -<!-- Live demo: set once the Vercel deploy is connected, e.g. https://clouddocs.vercel.app --> - -**Live demo:** _coming soon (Vercel)._ · **API:** `https://ngm5oizp91.execute-api.sa-east-1.amazonaws.com/v1/health` +**Live demo:** https://cloud-docs-theta.vercel.app · **API health:** `https://ngm5oizp91.execute-api.sa-east-1.amazonaws.com/v1/health` ## Why this exists @@ -130,16 +128,16 @@ runs Prettier + ESLint on staged files via Husky pre-commit hooks. The work is sequenced into publishable phases. Each phase produces something demoable so the project never sits half-finished. -| Phase | Theme | Status | -| ----- | ---------------------------------------------- | -------------- | -| 0 | Workspace, tooling, libs, healthcheck handler | ✅ Done | -| 1 | CDK stacks (S3, API GW, observability) | ✅ Done | -| 2 | Auth + multi-tenant orgs (API + frontend UI) | ✅ Done | -| 3 | Upload + S3 storage | ✅ Done | -| 4 | AI pipeline (extract → summarize → classify) | ✅ Done | -| 5 | Dashboard + full-text search | ✅ Done | -| 6 | Polish + production deploy (frontend → Vercel) | 🟡 In progress | -| 7+ | Embeddings + RAG chat + folders + Stripe + OCR | ⏳ | +| Phase | Theme | Status | +| ----- | ---------------------------------------------- | ------- | +| 0 | Workspace, tooling, libs, healthcheck handler | ✅ Done | +| 1 | CDK stacks (S3, API GW, observability) | ✅ Done | +| 2 | Auth + multi-tenant orgs (API + frontend UI) | ✅ Done | +| 3 | Upload + S3 storage | ✅ Done | +| 4 | AI pipeline (extract → summarize → classify) | ✅ Done | +| 5 | Dashboard + full-text search | ✅ Done | +| 6 | Polish + production deploy (frontend → Vercel) | ✅ Done | +| 7+ | Embeddings + RAG chat + folders + Stripe + OCR | ⏳ | See [`docs/plan.md`](docs/plan.md) for the detailed architecture, data model, security model and AWS free-tier strategy. diff --git a/apps/web/src/index.html b/apps/web/src/index.html index 5b25d4d..cbbb11e 100644 --- a/apps/web/src/index.html +++ b/apps/web/src/index.html @@ -2,9 +2,13 @@ <html lang="en"> <head> <meta charset="utf-8" /> - <title>web + CloudDocs AI — Intelligent document management + From cde6f7f34dd9ec7e7c06800767e013d855a59f3a Mon Sep 17 00:00:00 2001 From: SebastianLevano Date: Tue, 26 May 2026 20:09:51 -0500 Subject: [PATCH 2/2] fix(web): add Sign in / Get started links from the landing page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The landing page (built in Phase 0, before auth existed) had no way to reach login or register — visitors hit a dead end. Add a "Sign in" link + "Get started" button in the topbar and point the hero CTA at /auth/register. Refresh the stale "Phase 0" hero badge. e2e covers both links so it can't regress. --- apps/web-e2e/src/auth.spec.ts | 14 ++++++++ .../src/app/features/landing/landing.page.ts | 35 ++++++++++++------- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/apps/web-e2e/src/auth.spec.ts b/apps/web-e2e/src/auth.spec.ts index eaff057..93883eb 100644 --- a/apps/web-e2e/src/auth.spec.ts +++ b/apps/web-e2e/src/auth.spec.ts @@ -49,6 +49,20 @@ async function stubAnonymousBoot(page: Page): Promise { ); } +test('landing page links to register and login', async ({ page }) => { + await stubAnonymousBoot(page); + + await page.goto('/'); + // Hero CTA → register. + await page.getByTestId('hero-cta').click(); + await expect(page).toHaveURL(/\/auth\/register/); + + // Topbar "Sign in" → login. + await page.goto('/'); + await page.getByTestId('nav-signin').click(); + await expect(page).toHaveURL(/\/auth\/login/); +}); + test('guests are redirected from a protected route to login', async ({ page }) => { await stubAnonymousBoot(page); diff --git a/apps/web/src/app/features/landing/landing.page.ts b/apps/web/src/app/features/landing/landing.page.ts index 1b475ca..a8b95dd 100644 --- a/apps/web/src/app/features/landing/landing.page.ts +++ b/apps/web/src/app/features/landing/landing.page.ts @@ -1,8 +1,10 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; @Component({ selector: 'app-landing', changeDetection: ChangeDetectionStrategy.OnPush, + imports: [RouterLink], template: `
@@ -31,12 +33,22 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; alpha - @@ -48,7 +60,7 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; class="mb-6 inline-flex items-center gap-2 rounded-full border border-border bg-surface-2/60 px-3 py-1 text-xs font-medium text-text-muted backdrop-blur" > - Phase 0 · Workspace bootstrapped + Live · upload, AI summaries & search

@@ -68,18 +80,17 @@ import { ChangeDetectionStrategy, Component } from '@angular/core';