feat: add sequential progression and video watch lesson completion

Gate student content by completion order, track per-video watch progress
with seek enforcement, and auto-complete lessons at the configured
threshold. Show ring progress in the lesson header, keep watch progress
on rewatch, and sync progression locks client-side so the next item
unlocks after completion.
This commit is contained in:
Rotimi Best
2026-06-11 14:48:34 +01:00
parent c8154409f5
commit 52d9bf18c3
94 changed files with 3499 additions and 564 deletions
-137
View File
@@ -1,137 +0,0 @@
# Migrating Docs from docs.classroomio.com to classroomio.com/docs
## Summary
This guide documents the configuration to serve the docs at `classroomio.com/docs` instead of `docs.classroomio.com` using Vercel rewrites with TanStack Start.
## Changes Made
### 1. Docs App Configuration (`apps/docs`)
**a) Updated `apps/docs/vite.config.ts`:**
```typescript
export default defineConfig({
server: {
port: 3000
},
base: '/docs', // ← Added: Vite base path for asset resolution
plugins: [
mdx(await import('./source.config')),
tailwindcss(),
tsConfigPaths({
projects: ['./tsconfig.json']
}),
tanstackStart(),
react(),
nitro({
baseURL: '/docs' // ← Added: Nitro base URL for server routing
})
]
});
```
**b) Updated `apps/docs/src/router.tsx`:**
```typescript
export function getRouter() {
return createTanStackRouter({
basepath: '/docs', // ← Added: TanStack Router base path
defaultNotFoundComponent: NotFound,
defaultPreload: 'intent',
routeTree,
scrollRestoration: true
});
}
```
These three configurations work together:
- `base: '/docs'` - Tells Vite to prefix all asset paths with `/docs`
- `baseURL: '/docs'` - Tells Nitro to handle all routes under `/docs`
- `basepath: '/docs'` - Tells TanStack Router that routes are under `/docs`
### 2. Main Site Configuration (`apps/classroomio-com`)
**Created `apps/classroomio-com/vercel.json`**:
```json
{
"rewrites": [
{
"source": "/docs/",
"destination": "https://ciodocs.vercel.app/docs/"
},
{
"source": "/docs/:path*",
"destination": "https://ciodocs.vercel.app/docs/:path*"
}
]
}
```
This proxies all `/docs/*` requests from `classroomio.com` to your docs deployment.
### 3. Cleanup
- Removed empty `apps/classroomio-com/src/routes/(redirects)/docs/` folder that would conflict with the Vercel rewrite
## How It Works
1. **User visits:** `classroomio.com/docs/home`
2. **Vercel receives:** Request for `/docs/home`
3. **Vercel rewrites to:** `ciodocs.vercel.app/docs/home`
4. **Docs app serves:** The page from its `/docs/home` route (configured with `basepath: '/docs'`)
5. **User sees:** Content at `classroomio.com/docs/home` (URL unchanged)
The key is that **both the rewrite and the docs app preserve the `/docs` path**, keeping everything aligned.
## Deployment Steps
### Step 1: Deploy/Redeploy the Docs App
The docs app needs to be built and deployed with the `basepath: '/docs'` configuration:
1. Make sure changes to `apps/docs/src/router.tsx` are committed
2. Deploy or redeploy to `ciodocs.vercel.app`
3. Vercel will automatically detect and deploy the changes
**Vercel Project Settings for Docs:**
- **Root Directory:** `apps/docs`
- **Build Command:** `pnpm build`
- **Output Directory:** `.output`
- **Domain:** `ciodocs.vercel.app`
### Step 2: Deploy/Redeploy the Main Site
The main site needs the `vercel.json` rewrite configuration:
1. Make sure `apps/classroomio-com/vercel.json` is committed
2. Deploy or redeploy to `classroomio.com`
**Vercel Project Settings for Main Site:**
- **Root Directory:** `apps/classroomio-com`
- **Build Command:** `pnpm build`
- **Output Directory:** `.svelte-kit`
- **Domain:** `classroomio.com`
### Step 3: Test
Once both are deployed:
1. ✅ Visit `classroomio.com/docs` - should show docs homepage
2. ✅ Visit `classroomio.com/docs/quickstart/signup` - should show specific doc pages
3. ✅ Check that styles and JavaScript load correctly
4. ✅ Test navigation within docs
## Architecture
```
User Request: classroomio.com/docs/quickstart/signup
↓
Vercel (classroomio.com) - reads vercel.json
↓
Rewrite to: ciodocs.vercel.app/docs/quickstart/signup
↓
Docs App (TanStack Start with basepath: '/docs')
↓
Serves: /quickstart/signup route
↓
User sees content at: classroomio.com/docs/quickstart/signup
```