Skip to content

Commit 8f3bf73

Browse files
feat(devex): add project templates, Python SDK demo, quickstart scripts, and Vercel deploy config
- Add Templates page (/templates) to web dashboard with 6 project templates (React SDK Demo, Kanban Board, Social Media Clone, Python SDK Demo, TypeScript Quickstart, Python Quickstart) - Add sidebar navigation link for Templates - Create Python SDK demo project with full auth, CRUD, storage, mail demos and unit tests (6/6 passing with mocks) - Add interactive quickstart scripts for TypeScript and Python SDK scaffolding - Configure Vercel deployment for all frontend examples - Add CI workflow for example projects - Add comprehensive DevEx documentation (examples/DEVEX.md)
1 parent ba6fb3d commit 8f3bf73

14 files changed

Lines changed: 1565 additions & 1 deletion

File tree

.github/workflows/examples.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Examples CI
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
paths:
7+
- 'examples/**'
8+
- 'sdks/**'
9+
pull_request:
10+
branches: [ main ]
11+
paths:
12+
- 'examples/**'
13+
- 'sdks/**'
14+
15+
jobs:
16+
react-sdk-demo:
17+
runs-on: ubuntu-latest
18+
defaults:
19+
run:
20+
working-directory: examples/react-sdk-demo
21+
steps:
22+
- uses: actions/checkout@v4
23+
- uses: actions/setup-node@v4
24+
with:
25+
node-version: '20'
26+
cache: 'npm'
27+
cache-dependency-path: examples/react-sdk-demo/package-lock.json
28+
- run: npm ci
29+
- run: npm run build
30+
31+
sdk-kanban-client:
32+
runs-on: ubuntu-latest
33+
defaults:
34+
run:
35+
working-directory: examples/sdk-kanban/client
36+
steps:
37+
- uses: actions/checkout@v4
38+
- uses: actions/setup-node@v4
39+
with:
40+
node-version: '20'
41+
cache: 'npm'
42+
cache-dependency-path: examples/sdk-kanban/client/package-lock.json
43+
- run: npm ci
44+
- run: npm run build
45+
46+
social-demo-client:
47+
runs-on: ubuntu-latest
48+
defaults:
49+
run:
50+
working-directory: examples/social-demo/client
51+
steps:
52+
- uses: actions/checkout@v4
53+
- uses: actions/setup-node@v4
54+
with:
55+
node-version: '20'
56+
cache: 'npm'
57+
cache-dependency-path: examples/social-demo/client/package-lock.json
58+
- run: npm ci
59+
- run: npm run build
60+
61+
python-sdk-demo:
62+
runs-on: ubuntu-latest
63+
defaults:
64+
run:
65+
working-directory: examples/python-sdk-demo
66+
steps:
67+
- uses: actions/checkout@v4
68+
- uses: actions/setup-python@v5
69+
with:
70+
python-version: '3.11'
71+
- run: |
72+
python -m pip install --upgrade pip
73+
pip install -r requirements.txt
74+
- run: pytest tests/ -v

apps/web-dashboard/src/App.jsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Dashboard from './pages/Dashboard';
1212
import ProjectDetails from './pages/ProjectDetails';
1313
import CreateProject from './pages/CreateProject';
1414
import CreateCollection from './pages/CreateCollection';
15+
import Templates from './pages/Templates';
1516
import NotFound from './pages/NotFound';
1617
import Analytics from './pages/Analytics';
1718
import Releases from './pages/Releases';
@@ -81,6 +82,14 @@ function AppContent() {
8182
</ProtectedRoute>
8283
} />
8384

85+
<Route path="/templates" element={
86+
<ProtectedRoute>
87+
<MainLayout>
88+
<Templates />
89+
</MainLayout>
90+
</ProtectedRoute>
91+
} />
92+
8493
<Route path="/create-project" element={
8594
<ProtectedRoute allowIncompleteOnboarding>
8695
<MainLayout>

apps/web-dashboard/src/components/Layout/Sidebar.jsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { Link, useLocation, useParams } from 'react-router-dom';
22
import { useAuth } from '../../context/AuthContext';
33
import {
44
LayoutDashboard, Database, Shield, HardDrive, Settings, BarChart2,
5-
ArrowLeft, LogOut, X, Rocket, Webhook, Users, Mail, ChevronLeft, ChevronRight
5+
ArrowLeft, LogOut, X, Rocket, Webhook, Users, Mail, ChevronLeft, ChevronRight,
6+
LayoutTemplate
67
} from 'lucide-react';
78
import ThemeToggle from '../ThemeToggle';
89

@@ -81,6 +82,9 @@ function Sidebar({ logo, isOpen, onClose, isCollapsed, onToggleCollapse }) {
8182
<Link to="/dashboard" onClick={handleNavClick} className={`nav-item ${isActive('/dashboard') ? 'active' : ''}`} {...navA11yProps('Dashboard')}>
8283
<LayoutDashboard size={16} /> <span>Dashboard</span>
8384
</Link>
85+
<Link to="/templates" onClick={handleNavClick} className={`nav-item ${isActive('/templates') ? 'active' : ''}`} {...navA11yProps('Templates')}>
86+
<LayoutTemplate size={16} /> <span>Templates</span>
87+
</Link>
8488
<Link to="/releases" onClick={handleNavClick} className={`nav-item ${isActive('/releases') ? 'active' : ''}`} {...navA11yProps("What's New")}>
8589
<Rocket size={16} /> <span>What's New</span>
8690
</Link>

0 commit comments

Comments
 (0)