This is the code repository for the website. Serverless frontend built with Next.js + Tailwind CSS. Hosted on Netlify.
- Framework: Next.js 16 (App Router)
- Frontend: React 19, TypeScript
- Styling: Tailwind CSS, Framer Motion
- Backend/Database: Supabase
- Payments: Stripe
- 3D Graphics: Three.js, React Three Fiber
- Analytics: PostHog
- Deployment: Vercel
- Package Manager: pnpm
- First clone the repository:
https://github.com/V1Michigan/website-v2.git. - Make sure you enter the repository through terminal
cd <FilePath>/website-v2. - Install dependencies:
pnpm install. We DO NOT use npm for this. - Begin Devving:
pnpm devorpnpm run dev, whatever pleases you. This will allow you to access a dev version of the site @localhost:3000that will update automatically as you save files. - Create a new branch for your NEW feature:
git checkout -b [FEATURE_NAME]. If you want to go to an existing feature:git checkout [FEATURE_NAME]. - Ask another team member for the latest
.envfile. - When you finish a part of your feature and wish to push the changes to the remote repository:
git add [changed_files](replacechanged_fileswith the actual file names you changed)git commit -m "meaningful commit message goes here"git push --set-upstream origin [FEATURE_NAME](the next time you push to this branch you can just saygit push).
We use ESLint + Prettier to lint our code and enforce consistent style. To make this process smoother, we've set up:
-
Pre-commit hooks: Automatically lint and format your code when you commit changes. This uses Husky and lint-staged to ensure code quality without disrupting your workflow.
-
Non-blocking CI: Our GitHub Actions workflow checks for linting issues but won't block builds due to formatting problems.
For manual linting:
- Use
pnpm lintto check for linting/style errors - Use
pnpm lint --fixto automatically fix (some) linting issues
We recommend using an ESLint plugin for your editor to lint and format your code as you write it.
Projects are stored in Notion and built into static JSON data at build time.
Notion DataSource → build script → projects-data.json → API → Components
- Data Source: Project information is stored as a Notion DataSource (configured via
NOTION_DATA_SOURCE_ID) - Build Process: The build script fetches data from Notion, downloads images, and generates static JSON
- Serving: An API route serves the pre-built JSON data
- Consumption: Components use React Query to fetch and display project data
To build or update project data:
# Build only project data (for development/testing)
pnpm build:projects
# Build project data as part of full production build
pnpm buildTo edit projects in the Notion database, visit: V1 Projects Notion Database
These must be set in your .env.local file:
NOTION_API_KEY- Your Notion integration API keyNOTION_DATA_SOURCE_ID- The ID of the Notion DataSource containing project information
scripts/build-projects-data.ts- Build script that fetches from Notion and generates JSONlib/notion.ts- Data transformation, filtering, and sorting logicpublic/projects-data.json- Generated project data (do not edit manually)app/api/projects/route.ts- API route serving project datahooks/useProjects.ts- React hook for fetching projectstypes/project.ts- TypeScript interfaces for Project typeapp/projects/- Project directory page and components
The build process automatically downloads and optimizes:
- Company logos: Stored in
public/projects/[company-name].jpg - Founder profile pictures: Stored in
public/founders/[company-name]/[founder-name].jpg
All images are resized to 256x256px and converted to JPEG format using Sharp.
Projects can be filtered by:
- Funding sources: VC firms, accelerators (e.g., Y Combinator, Techstars)
- Cohorts: Product Studio cohorts by semester
- Categories: Industry tags (e.g., AI/ML, Developer Tools, B2B)
- Search: By company name or project title
Projects are sorted by:
- Funding status (funded projects first)
- Investor prestige score
- Cohort order (newest first)
See the CONTRIBUTING.md file for more detailed information about code standards and workflow.