Development Tools: VS Code, GitHub, Vercel, Supabase, CI/CD
Complete setup guide for development environment including IDE, version control, hosting, database, and CI/CD pipeline
Development Tools: Building Your Technical Foundation
Your development environment is where ideas become reality. These five tools form the complete lifecycle of modern web development—from writing code to deploying at scale. I've tested dozens of alternatives; this stack maximizes free tier value while maintaining professional capabilities.
VS Code: Your Command Center
What It Is
Visual Studio Code is Microsoft's free, open-source code editor that has become the industry standard for web development. It's not an IDE in the traditional sense—it's lighter, faster, and infinitely extensible through its marketplace of over 40,000 extensions.
Why This One
Free forever with professional features. Unlike JetBrains' premium IDEs, VS Code gives you 95% of the functionality at 0% of the cost. The extension ecosystem means you can customize it for any language or framework without switching editors.
GitHub Copilot is included for students and open-source contributors. If you have a student email (.edu) or contribute to open-source projects, you get GitHub Copilot free—normally $10/month for AI-powered code suggestions.
Live Share for remote collaboration. Built-in pair programming without screen sharing. Share your editor session with teammates who can edit, debug, and navigate your codebase in real-time.
Setup Instructions
Download and Install
Visit code.visualstudio.com and download for your operating system.
Mac users: Move VS Code to Applications folder after downloading.
Windows users: Check "Add to PATH" during installation for command-line access.
Linux users: Use your package manager:
# Debian/Ubuntu
sudo apt install code
# Fedora/RHEL
sudo dnf install code
# Arch
yay -S visual-studio-code-binInstall Essential Extensions
Open VS Code and press Cmd/Ctrl + Shift + X to open Extensions panel. Search and install these foundational extensions:
Language Support:
- ESLint (JavaScript/TypeScript linting)
- Prettier (Code formatting)
- Auto Rename Tag (HTML/JSX tag pairs)
- Path Intellisense (File path autocomplete)
Git Integration:
- GitLens (Enhanced Git capabilities)
- Git Graph (Visual commit history)
Productivity:
- Error Lens (Inline error display)
- Better Comments (Colorized comment annotations)
- TODO Highlight (Track TODOs and FIXMEs)
Framework-Specific:
- ES7+ React/Redux/React-Native snippets (if using React)
- Tailwind CSS IntelliSense (if using Tailwind)
- Volar (if using Vue)
Configure Settings
Press Cmd/Ctrl + , to open Settings, then click the {} icon (top right) to open settings.json. Add these recommended settings:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true,
"files.autoSave": "onFocusChange",
"git.autofetch": true,
"terminal.integrated.fontSize": 14,
"workbench.colorTheme": "One Dark Pro",
"editor.minimap.enabled": false,
"editor.fontSize": 14,
"editor.lineHeight": 1.6,
"editor.fontLigatures": true,
"editor.fontFamily": "Fira Code, Menlo, Monaco, 'Courier New', monospace"
}Set Up GitHub Copilot (If Eligible)
For students:
- Verify GitHub Student Developer Pack at education.github.com/pack
- Install GitHub Copilot extension in VS Code
- Sign in with GitHub when prompted
- Copilot activates automatically
For open-source contributors:
- Apply at github.com/copilot
- Provide evidence of open-source contributions
- Approval typically takes 1-3 business days
Pro Tips: Enable Settings Sync in VS Code to synchronize your settings across devices via GitHub. Learn keyboard shortcuts, especially Cmd/Ctrl + P which is your best friend for quick file navigation. Customize your keybindings through File → Preferences → Keyboard Shortcuts to match your workflow.
About GitHub Copilot Access: While Copilot offers impressive AI-powered suggestions, it's not essential for learning to code. Many developers prefer to understand patterns deeply before using AI assistance. Consider waiting until you're comfortable with fundamentals before relying on Copilot—it's a tool to accelerate work, not replace understanding.
GitHub: Version Control and Collaboration
What It Is
GitHub is the world's largest code hosting platform, built on Git version control. It stores your code history, enables collaboration, manages issues and project boards, and serves as your professional portfolio through your public repositories.
Why This One
Industry standard for collaboration. Over 100 million developers use GitHub. Your contributions graph becomes your resume—many employers check GitHub profiles before interviews.
Unlimited private repositories for free. GitHub removed all restrictions on private repos in 2019. Students get GitHub Pro free through the Student Developer Pack, adding advanced features like GitHub Copilot and GitHub Actions minutes.
Integrated CI/CD and project management. GitHub Actions provides 2,000 free build minutes per month. GitHub Projects offers kanban boards, issue tracking, and milestone management—no need for separate tools like Jira.
Setup Instructions
Create Your Account
Visit github.com and sign up with your email. Choose a professional username—this appears in all your repository URLs and becomes part of your professional identity.
Username best practices:
- Use your real name or recognizable pseudonym (avoid numbers or special characters)
- Lowercase preferred (
julianchennotJulianChen123) - Keep it short and memorable
- This username follows you forever—choose wisely
Set Up SSH Authentication
Generate SSH keys for secure, password-free authentication:
# Generate SSH key pair
ssh-keygen -t ed25519 -C "your_email@example.com"
# Start SSH agent
eval "$(ssh-agent -s)"
# Add private key to agent
ssh-add ~/.ssh/id_ed25519
# Copy public key to clipboard
# macOS
pbcopy < ~/.ssh/id_ed25519.pub
# Windows (PowerShell)
Get-Content ~/.ssh/id_ed25519.pub | Set-Clipboard
# Linux
xclip -sel clip < ~/.ssh/id_ed25519.pubAdd the copied public key to GitHub:
- Go to GitHub → Settings → SSH and GPG keys
- Click "New SSH key"
- Paste your public key
- Give it a descriptive title (e.g., "MacBook Pro 2024")
Test the connection:
ssh -T git@github.comYou should see: Hi username! You've successfully authenticated...
Configure Git Locally
Set your identity for all commits:
# Set your name (appears in commit history)
git config --global user.name "Your Name"
# Set your email (must match GitHub email)
git config --global user.email "your_email@example.com"
# Set default branch name to 'main'
git config --global init.defaultBranch main
# Enable colored output
git config --global color.ui auto
# Set VS Code as default editor
git config --global core.editor "code --wait"Verify your configuration:
git config --listLearn Essential Git Commands
Master these commands for daily workflow:
# Initialize new repository
git init
# Clone existing repository
git clone git@github.com:username/repo.git
# Check status of changes
git status
# Stage files for commit
git add . # Stage all changes
git add filename.txt # Stage specific file
# Commit staged changes
git commit -m "Descriptive message"
# Push commits to GitHub
git push origin main
# Pull latest changes from GitHub
git pull origin main
# Create and switch to new branch
git checkout -b feature-name
# Switch between branches
git checkout main
# Merge branch into current branch
git merge feature-name
# View commit history
git log --oneline --graph --allSet Up a Repository
Create your first repository on GitHub:
- Click "+" icon (top right) → New repository
- Name it (e.g.,
my-first-project) - Add description (optional but recommended)
- Choose Public or Private
- Check "Add a README file"
- Select
.gitignoretemplate (e.g., Node) - Choose license (MIT is common for open source)
- Click "Create repository"
Clone it locally:
git clone git@github.com:username/my-first-project.git
cd my-first-projectPro Tips: Write meaningful commit messages in present tense imperative ("Add feature" not "Added feature"). Commit early and often—small, focused commits are easier to debug than massive changes. Use .gitignore to exclude node_modules, .env files, and build artifacts. Learn git rebase for cleaning up commit history before pushing to main.
GitHub Projects for Task Management
GitHub Projects provides free kanban boards integrated with your repositories:
Set up a project board:
- Go to your repository → Projects → New project
- Choose "Board" template
- Customize columns (typically: Todo, In Progress, In Review, Done)
- Link issues and pull requests by dragging cards
- Add automation rules (auto-move cards on PR merge, etc.)
Best practices:
- Create issues for all features and bugs (use templates)
- Label issues by type (bug, feature, documentation) and priority
- Assign issues to yourself or collaborators
- Link pull requests to issues with "Closes #123" in PR description
- Use milestones to group related issues for releases
Vercel: Frontend Hosting and Deployment
What It Is
Vercel is a cloud platform for deploying frontend applications with zero configuration. It's built by the creators of Next.js and optimized for modern JavaScript frameworks. Push to GitHub, and your site deploys automatically to a global CDN in seconds.
Why This One
Zero-configuration deployments. Connect your GitHub repo, and Vercel handles everything—build pipeline, CDN distribution, SSL certificates, preview URLs for every pull request. No Docker, no servers, no DevOps knowledge required.
Generous free tier for hobbyists. Unlimited deployments, 100GB bandwidth per month, automatic HTTPS, and preview deployments for every git push. The free tier is legitimately sufficient for most solopreneur projects until you reach significant scale.
Best Next.js support (because they built it). If you're using Next.js, Vercel provides the fastest builds, automatic image optimization, and edge functions without additional configuration.
Setup Instructions
Create Vercel Account
Visit vercel.com and sign up with your GitHub account. This enables automatic repository access and streamlines the deployment process.
Deploy Your First Project
From the Vercel dashboard:
- Click "Add New..." → Project
- Import your GitHub repository
- Vercel auto-detects framework (Next.js, React, Vue, etc.)
- Configure build settings (usually auto-detected correctly):
- Framework Preset: Auto-detected
- Build Command:
npm run build(default) - Output Directory:
distor.next(auto-detected) - Install Command:
npm install(default)
- Add environment variables if needed (click "Environment Variables")
- Click "Deploy"
Your site deploys in 30-60 seconds with a URL like your-project.vercel.app.
Configure Custom Domain (Optional)
If you have a custom domain:
- Go to Project Settings → Domains
- Add your domain (e.g.,
myproject.com) - Follow DNS configuration instructions:
- Add
Arecord pointing to Vercel IP (provided) - Or add
CNAMErecord for subdomains
- Add
- Vercel automatically provisions SSL certificate (takes 5-10 minutes)
Domain providers I recommend:
- Namecheap: $8-12/year for .com domains
- Porkbun: Slightly cheaper, excellent UI
- Cloudflare Registrar: At-cost pricing (cheapest, but requires Cloudflare account)
Set Up Preview Deployments
Vercel automatically creates preview URLs for every git branch and pull request. Configure this behavior:
- Go to Project Settings → Git
- Enable "Automatic deployments from Git"
- Choose which branches trigger production deploys (usually
main) - All other branches get preview URLs (e.g.,
feature-branch.vercel.app)
Why this matters: Test features in production-like environment before merging. Share preview URLs with clients or teammates for feedback without affecting live site.
Pro Tips: Use environment variables for API keys and secrets—never commit them to Git. Set different variables for development, preview, and production environments. Enable Vercel Analytics (free tier) to track Web Vitals and performance metrics. Use vercel dev locally to simulate production environment during development.
Vercel Alternatives
Best for: Next.js projects, zero-config deployments, developer experience.
Free tier: 100GB bandwidth/month, unlimited deployments, automatic preview URLs.
Strengths: Fastest Next.js builds, excellent documentation, intuitive dashboard.
Limitations: Bandwidth charges beyond free tier can escalate quickly at scale.
Best for: JAMstack sites, form handling, split testing.
Free tier: 100GB bandwidth/month, form submissions, identity management.
Strengths: More generous build minutes (300/month vs Vercel's 100), built-in form handling without backend.
Limitations: Slower Next.js builds compared to Vercel, less modern UI.
Best for: Cost-conscious developers comfortable with minimal hand-holding.
Free tier: Unlimited bandwidth and requests (yes, truly unlimited).
Strengths: Unbeatable free tier, global CDN, integrates with Cloudflare Workers for edge functions.
Limitations: Less polished UI, fewer integrations, steeper learning curve for beginners.
My recommendation: Start with Vercel for the developer experience. If bandwidth costs become an issue at scale (100k+ monthly visitors), consider migrating to Cloudflare Pages.
Supabase: Backend and Database
What It Is
Supabase is an open-source Firebase alternative providing PostgreSQL database, authentication, file storage, and real-time subscriptions—all accessible via REST and GraphQL APIs. It's a complete backend-as-a-service that eliminates the need to build and maintain your own server infrastructure.
Why This One
PostgreSQL instead of NoSQL. Unlike Firebase's Firestore, Supabase uses PostgreSQL—a mature, SQL-based relational database. You get ACID transactions, foreign keys, joins, and a query language that transfers to any enterprise environment. This is real database knowledge, not vendor-specific NoSQL.
Row-Level Security (RLS) for free. Built-in authorization at the database level. Define policies like "users can only read their own data" directly in PostgreSQL. No middleware, no authorization logic in your application code—the database enforces access control.
Generous free tier that actually works. 500MB database storage, 1GB file storage, 2GB bandwidth per month, unlimited API requests. The free tier doesn't pause or throttle—it's legitimately usable for production projects with moderate traffic.
Setup Instructions
Create Supabase Project
Visit supabase.com and sign up with GitHub. Create a new project:
- Click "New project"
- Choose organization (create one if first time)
- Name your project
- Set database password (save this securely—you'll need it for direct database access)
- Choose region (select closest to your users)
- Click "Create new project"
Project provisions in 1-2 minutes.
Get Your API Credentials
Navigate to Project Settings → API:
- Project URL: Your API endpoint (e.g.,
https://abcdefgh.supabase.co) - anon/public key: Safe to use in client-side code (respects RLS policies)
- service_role key: Full database access (never expose in frontend!)
Copy these to your .env.local file:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-keyCreate Your First Table
Go to Table Editor → New table. Example user profiles table:
Table name: profiles
Columns:
id(uuid, primary key, default: auth.uid())email(text)full_name(text)avatar_url(text, nullable)created_at(timestamp, default: now())
Enable Row Level Security (RLS):
- Go to Authentication → Policies
- Click "Enable RLS" on
profilestable - Add policy: "Users can read their own profile"
- Policy name:
Users can view own profile - Target roles:
authenticated - USING expression:
auth.uid() = id - Check:
SELECT
- Policy name:
Install Supabase Client
In your project directory:
npm install @supabase/supabase-jsCreate lib/supabase.js:
import { createClient } from '@supabase/supabase-js'
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
export const supabase = createClient(supabaseUrl, supabaseAnonKey)Set Up Authentication
Supabase provides email/password auth, OAuth providers (Google, GitHub), and magic links out of the box.
Enable email authentication:
- Go to Authentication → Settings → Auth Providers
- Email provider is enabled by default
- Configure email templates (optional customization)
Example signup function:
import { supabase } from './lib/supabase'
async function signUp(email, password) {
const { data, error } = await supabase.auth.signUp({
email,
password,
})
if (error) throw error
return data
}Example login function:
async function signIn(email, password) {
const { data, error } = await supabase.auth.signInWithPassword({
email,
password,
})
if (error) throw error
return data
}Configure Storage for File Uploads
Create a storage bucket for user uploads:
- Go to Storage → Create new bucket
- Bucket name:
avatars(or any name) - Set public/private (public allows direct URL access)
- Click "Create bucket"
Set up storage policies:
- Click bucket → Policies → New policy
- Policy name:
Users can upload their own avatar - Target roles:
authenticated - Allowed operations:
INSERT,UPDATE - USING expression:
auth.uid() = owner_id
Upload example:
async function uploadAvatar(file, userId) {
const { data, error } = await supabase.storage
.from('avatars')
.upload(`${userId}/avatar.png`, file)
if (error) throw error
// Get public URL
const { data: { publicUrl } } = supabase.storage
.from('avatars')
.getPublicUrl(`${userId}/avatar.png`)
return publicUrl
}Pro Tips: Always enable Row Level Security (RLS) on tables—it's your primary security layer. Use database triggers and functions for complex business logic rather than implementing in application code. Leverage Supabase's real-time subscriptions for collaborative features. Study PostgreSQL documentation—Supabase is just Postgres with a friendly interface.
Supabase Alternatives
Best for: Developers who want SQL, open-source, and database control.
Free tier: 500MB database, 1GB storage, 2GB bandwidth/month.
Strengths: Real PostgreSQL, row-level security, self-hostable, superior developer experience.
Limitations: Smaller ecosystem than Firebase, fewer third-party integrations.
Best for: Mobile apps, Google Cloud integration, massive scale.
Free tier: 1GB storage, 10GB bandwidth/month, 50k reads per day.
Strengths: Largest BaaS ecosystem, excellent mobile SDKs, Google-scale infrastructure.
Limitations: NoSQL only (Firestore), vendor lock-in, complex pricing at scale.
Best for: MySQL users, database branching workflows.
Free tier: 5GB storage, 1 billion row reads/month.
Strengths: Database branching like Git, horizontal scaling built-in, excellent CLI.
Limitations: No authentication or storage (database only), requires more setup for backend features.
My recommendation: Supabase for full-stack projects where you control the data model. Firebase if building mobile-first apps in Google ecosystem. PlanetScale if you only need a database and will build auth/storage separately.
GitHub Actions: CI/CD Pipeline
What It Is
GitHub Actions is a built-in automation platform that runs workflows triggered by events in your repository—commits, pull requests, issues, releases, or scheduled times. It's your CI/CD pipeline, testing suite, and deployment automation all living in your repository as code.
Why This One
Integrated directly into GitHub. No third-party CI services like CircleCI or Travis CI needed. Workflows live in .github/workflows/ as YAML files versioned with your code. Changes to workflows go through pull requests like any other code.
2,000 free build minutes per month. Sufficient for most solopreneur projects. Public repositories get unlimited minutes. If you exceed limits, GitHub Actions is cheaper than alternatives ($0.008/minute vs Jenkins/CircleCI hosting costs).
Massive marketplace of pre-built actions. Over 10,000 community actions for common tasks—deploying to Vercel, sending Slack notifications, running security scans. Don't reinvent the wheel.
Setup Instructions
Create Your First Workflow
In your repository root, create .github/workflows/ci.yml:
name: CI Pipeline
# Trigger on push to main and all pull requests
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
# Checkout code
- uses: actions/checkout@v3
# Set up Node.js
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
# Install dependencies
- name: Install dependencies
run: npm ci
# Run linter
- name: Run ESLint
run: npm run lint
# Run tests
- name: Run tests
run: npm test
# Build project
- name: Build
run: npm run buildCommit and push this file. GitHub Actions activates automatically.
Add Deployment Workflow
Create .github/workflows/deploy.yml for automatic Vercel deployments:
name: Deploy to Vercel
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to Vercel
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
vercel-args: '--prod'Get Vercel credentials:
- Install Vercel CLI:
npm i -g vercel - Run
vercel login - Run
vercelin project directory to link project - Get token:
vercel token create - Get org and project IDs from
.vercel/project.json
Add secrets to GitHub:
- Go to repository Settings → Secrets → Actions
- Click "New repository secret"
- Add
VERCEL_TOKEN,VERCEL_ORG_ID,VERCEL_PROJECT_ID
Set Up Automated Testing
Enhance your CI pipeline with test coverage reporting:
name: Test Coverage
on: [push, pull_request]
jobs:
coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Run tests with coverage
run: npm test -- --coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage/lcov.info
fail_ci_if_error: trueSet up Codecov:
- Visit codecov.io and sign in with GitHub
- Add your repository
- Copy upload token
- Add
CODECOV_TOKENto GitHub secrets
Add Scheduled Workflows
Run tasks on a schedule (e.g., daily dependency audits):
name: Security Audit
on:
schedule:
# Run every day at 2 AM UTC
- cron: '0 2 * * *'
workflow_dispatch: # Allow manual triggers
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Run npm audit
run: npm audit --audit-level=high
- name: Check for outdated dependencies
run: npm outdatedCron syntax quick reference:
0 2 * * *- Daily at 2 AM0 */6 * * *- Every 6 hours0 0 * * 0- Weekly on Sunday0 0 1 * *- Monthly on 1st day
Pro Tips: Use npm ci instead of npm install in workflows—it's faster and uses exact versions from package-lock.json. Cache dependencies with actions/setup-node@v3 and its built-in caching. Use matrix builds to test multiple Node versions simultaneously. Set up branch protection rules requiring CI to pass before merging PRs.
Common GitHub Actions Use Cases
Automated deployment checklist:
✅ Run tests on every PR
✅ Deploy to staging on merge to develop branch
✅ Deploy to production on merge to main branch
✅ Run security audits daily
✅ Auto-assign reviewers to PRs
✅ Label PRs based on changed files
✅ Send Slack notification on deployment success/failure
✅ Generate release notes automatically
Example: Auto-label PRs by file changes:
name: Label PRs
on: pull_request
jobs:
label:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
configuration-path: .github/labeler.ymlCreate .github/labeler.yml:
documentation:
- '**/*.md'
frontend:
- 'src/components/**'
- 'src/pages/**'
backend:
- 'src/api/**'
- 'src/lib/**'Free Tier Summary: What You Get
Here's everything this development stack provides at zero cost:
VS Code:
✅ Full-featured IDE forever free ✅ Unlimited extensions and customization ✅ GitHub Copilot (if student or OSS contributor) ✅ Live Share collaboration ✅ Built-in Git integration
GitHub:
✅ Unlimited public and private repositories ✅ 2,000 Actions minutes/month ✅ Unlimited collaborators ✅ Project boards and issue tracking ✅ GitHub Pages hosting for static sites
Vercel:
✅ 100GB bandwidth/month ✅ Unlimited deployments ✅ Automatic HTTPS and preview URLs ✅ Edge functions and image optimization ✅ Analytics (Web Vitals)
Supabase:
✅ 500MB database storage ✅ 1GB file storage ✅ 2GB bandwidth/month ✅ Unlimited API requests ✅ Real-time subscriptions ✅ Row-level security
GitHub Actions:
✅ 2,000 build minutes/month ✅ Unlimited workflows ✅ Access to 10,000+ community actions ✅ Matrix builds across OS/versions
Total monthly cost: $0
Optional costs to consider:
- Custom domain: $8-12/year (one-time annual, not monthly)
- GitHub Copilot (if not student/OSS): $10/month
- Additional Vercel bandwidth beyond 100GB: $20/100GB
- Supabase Pro (if exceeding free limits): $25/month
This stack is production-ready for projects serving thousands of users before hitting any paid tiers.
Next Steps
You've set up your complete development environment. In the next chapter, we'll build communication infrastructure with Slack, Discord, and Notion to manage your solopreneur workflow.
Related tutorials in this series:
- Content Production Pipeline (coming soon)
- AI Research Workflow (coming soon)
- Task Exposure Analysis (coming soon)
Core Stack Overview: All 18 Tools at a Glance
Complete overview of the $0 tech stack with all 18 tools, their free tier limits, and upgrade triggers
Marketing Tools: Content, SEO, Email, Social, Design
Complete setup guide for marketing and content tools including Notion, SEO research, Mailchimp, Buffer, and Canva