A portfolio website to showcase projects and serve as a personal landing page for me.
- Frontend: Next.js (App Router) with TypeScript and Tailwind CSS
- Backend: Express.js API with TypeScript
- Database: Nothing yet, keeping it simple for now
- Deployment: Next.js on Vercel, Express API on Render
- Landing page with Hero section
- Featured projects from GitHub (tagged with "featured" topic)
- All projects page with search functionality
- Project detail pages with README rendering
- About page with skills and contact information
- Fully responsive design
- Dark theme, as all things should be
- Node.js 18+ and npm
- GitHub account with public repositories
-
Navigate to the API directory:
cd api -
Install dependencies:
npm install
-
Create a
.envfile (copy from.env.example):cp .env.example .env
-
Configure environment variables in
.env:GITHUB_USERNAME=mitchellrust GITHUB_TOKEN=your_github_personal_access_token PORT=4000To create a GitHub token:
- Go to GitHub Settings > Developer settings > Personal access tokens
- Generate a new token with
public_reposcope - Copy the token to your
.envfile
-
Start the development server:
npm run dev
The API will be available at
http://localhost:4000
-
Navigate to the frontend directory:
cd frontend -
Install dependencies:
npm install
-
Create a
.env.localfile (copy from.env.local.example):cp .env.local.example .env.local
-
Configure environment variables in
.env.local:NEXT_PUBLIC_API_BASE=http://localhost:4000 -
Start the development server:
npm run dev
The frontend will be available at
http://localhost:3000
- Create a new Web Service on Render
- Connect your GitHub repository
- Configure the service:
- Root Directory:
api - Build Command:
npm install && npm run build - Start Command:
npm start
- Root Directory:
- Add environment variables:
GITHUB_USERNAME: mitchellrustGITHUB_TOKEN: your_github_tokenPORT: 4000 (Render will override this)
- Deploy
Your API will be available at: https://your-service.onrender.com
-
Install Vercel CLI (optional):
npm install -g vercel
-
Deploy using Vercel CLI or connect via GitHub:
cd frontend vercelOr use the Vercel Dashboard:
- Import your repository
- Set Root Directory to
frontend - Add environment variable:
NEXT_PUBLIC_API_BASE: https://your-service.onrender.com
-
Deploy
Site will be available at: https://your-site.vercel.app
.
├── api/ # Express API
│ ├── src/
│ │ ├── server.ts # Main server file
│ │ ├── githubClient.ts # GitHub API integration
│ │ ├── routes/
│ │ │ └── repos.ts # API routes
│ │ └── types.ts # TypeScript types
│ ├── package.json
│ └── tsconfig.json
│
└── frontend/ # Next.js Frontend
├── app/
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Homepage
│ ├── globals.css # Global styles
│ ├── about/
│ │ └── page.tsx # About page
│ └── projects/
│ ├── page.tsx # Projects list
│ └── [owner]/[repo]/
│ └── page.tsx # Project detail
├── components/
│ ├── Navbar.tsx
│ ├── Footer.tsx
│ ├── Hero.tsx
│ ├── ProjectCard.tsx
│ ├── ProjectGrid.tsx
│ └── MarkdownRenderer.tsx
├── lib/
│ ├── api.ts # API client
│ └── types.ts # TypeScript types
├── public/ # Static assets
├── package.json
├── tailwind.config.ts
└── tsconfig.json
GET /health- Health checkGET /repos- List all public repositories (excluding forks)- Query params:
page,per_page,sort,search
- Query params:
GET /repos/:owner/:repo- Get single repositoryGET /repos/:owner/:repo/readme- Get repository README (with rewritten asset URLs)GET /featured-repos- Get featured repositories (tagged with "featured" topic)
Add the featured topic to any GitHub repository you want to showcase on the homepage:
- Go to your repository on GitHub
- Click the gear icon next to "About"
- Add
featuredto the Topics field
Edit frontend/app/globals.css:
:root {
--accent: #00A8FF; /* Electric blue */
--accent-hover: #0090e0; /* Darker blue */
/* ... */
}Edit frontend/app/about/page.tsx to customize your bio, skills, and technologies.