Developer-facing documentation for the In-Sync frontend (Vite + React + TypeScript). This app powers the startup, VC, analyst, and admin experiences for the In-Sync platform.
- React 18 + TypeScript
- Vite 7 (bundler & dev server)
- React Router v6 (routing)
- Firebase (auth)
- TanStack React Query v5 (server state)
- Tailwind CSS + Radix UI (shadcn-style components)
- Lucide React (icons)
- Prereqs: Node.js 18+ and npm (or pnpm)
cd insync-connect
npm installCreate a .env file and set:
VITE_FIREBASE_AUTH_DOMAIN– Firebase Auth domainVITE_FIREBASE_PROJECT_ID– Firebase project IDVITE_FIREBASE_API– Backend API base URL (Cloud Functions HTTPS endpoint)VITE_FIREBASE_API_KEY– Firebase Web API key
Optional demo accounts:
VITE_DEMO_VC_EMAILVITE_DEMO_STARTUP_EMAILVITE_DEMO_ANALYST_EMAILVITE_DEMO_PASSWORD
# Start dev server
npm run dev
# Type-check & lint
npm run lint
# Production build + preview
npm run build
npm run previewThe app usually runs at http://localhost:5173.
src/main.tsx– Vite entrysrc/App.tsx– Router +QueryClientProvider+ top-level layoutssrc/landing/– Marketing/landing pagessrc/components/– Reusable UI components (Navbars, dashboards, modals, memo editor, etc.)src/pages/– Route-level screens (startup, vc, analyst, admin, auth)src/lib/– API helpers (api.ts), Firebase config, startup memo helpers, session utilssrc/hooks/– Custom hooks (e.g.use-toast, onboarding storage)
Role-based routing is enforced via wrappers such as RequireAuth, RequireUserType, and AppLayoutWithNavbar.
- Auth: Email/password + Firebase; guarded routes via
RequireAuthand user-type gates. - Startup:
- Onboarding wizard → persists to backend and local storage.
StartupMemoPageuses React Query for loading profile + memo, lazy-loads heavy editors.
- VC:
- Onboarding to collect thesis.
VCDashboardfetches firm + memo via React Query and code-splits heavy tabs likeEditMemoTab.
- TypeScript everywhere (
.tsx/.ts). - React Query for async server data; avoid ad-hoc
fetchin components where possible. - Tailwind for layout and styling; keep complex variants in utility components when needed.
- Prefer function components + hooks; no class components.
- Put shared logic in
src/liborsrc/hooksrather than inside pages.
Commercial use is permitted only with explicit approval from the licensors. See COMMERCIAL_LICENSE.md for terms.