Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions app/(app)/dashboard/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export default function DashboardPage() {
return (
<main className="min-h-screen bg-background text-foreground">
<div className="mx-auto w-full max-w-7xl px-4 py-8 lg:px-8">
<h1 className="text-2xl font-semibold">Dashboard</h1>
<p className="mt-2 text-sm text-muted-foreground">
Project management area.
</p>
</div>
</main>
);
}
12 changes: 12 additions & 0 deletions app/(marketing)/docs/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export default function DocsPage() {
return (
<main className="min-h-screen bg-background text-foreground">
<div className="mx-auto w-full max-w-7xl px-4 py-8 lg:px-8">
<h1 className="text-2xl font-semibold">Docs</h1>
<p className="mt-2 text-sm text-muted-foreground">
Documentation.
</p>
</div>
</main>
);
}
12 changes: 12 additions & 0 deletions app/(marketing)/landing/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export default function LandingPage() {
return (
<main className="min-h-screen bg-background text-foreground">
<div className="mx-auto w-full max-w-7xl px-4 py-8 lg:px-8">
<h1 className="text-2xl font-semibold">Draftly</h1>
<p className="mt-2 text-sm text-muted-foreground">
Marketing landing page.
</p>
</div>
</main>
);
}
2 changes: 1 addition & 1 deletion app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ export default async function Home() {
redirect("/editor");
}

redirect("/sign-in");
redirect("/landing");
}
12 changes: 12 additions & 0 deletions context/progress-tracker.md
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,18 @@ Update this file whenever the current phase, active feature, or implementation s
- Updated `app/editor/[projectId]/page.tsx`:
- Passes project `isOwner` into workspace shell for autosave coordination.

- Added three route shells (structure only, no feature logic):
- `app/(app)/dashboard/page.tsx` -> `/dashboard`: authenticated landing, placeholder for the
future project management area.
- `app/(marketing)/landing/page.tsx` -> `/landing`: public marketing landing page.
- `app/(marketing)/docs/page.tsx` -> `/docs`: public (non-private) docs page.
- All three are server components with placeholder markup only. No auth checks, no route
protection, and no navigation wiring were added; `app/page.tsx` still redirects signed-in
users to `/editor` and everyone else to `/sign-in`.
- Route groups `(app)` and `(marketing)` carry no layout files yet, so they do not affect URLs.
- Validation checks: `pnpm typecheck` and `pnpm lint` passed.


## Next Up

- Select and implement the next available feature spec unit after `22-design-agent-api.md`.
Expand Down
11 changes: 10 additions & 1 deletion proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,16 @@ function getRoutePath(envValue: string | undefined, fallback: string) {
const signInPath = getRoutePath(process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL, "/sign-in");
const signUpPath = getRoutePath(process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL, "/sign-up");

const isPublicRoute = createRouteMatcher([signInPath, `${signInPath}(.*)`, signUpPath, `${signUpPath}(.*)`]);
const isPublicRoute = createRouteMatcher([
"/",
signInPath,
`${signInPath}(.*)`,
signUpPath,
`${signUpPath}(.*)`,
"/landing",
"/docs",
"/docs(.*)",
]);

export default clerkMiddleware(
async (auth, req) => {
Expand Down
Loading