This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the TS template for information on how to integrate TypeScript and typescript-eslint in your project.
A modern, no-code LaTeX resume editor built with React, FastAPI, and Supabase. Create professional resumes with fine-tuned layout control, live preview, and PDF export.
- No-code editing: Visual editor with drag-and-drop sections
- LaTeX quality: Professional typesetting powered by Tectonic
- Live preview: See changes in real-time
- Fine-tuned control: Adjust margins, spacing, fonts, and layout
- Multiple resumes: Save and manage multiple resume versions
- Modern auth: Secure authentication with Supabase
- Fast performance: JWT signing keys for sub-2ms auth verification
Frontend:
- React 18 + Vite
- Tailwind CSS
- React Router
- Supabase Client
Backend:
- FastAPI
- Tectonic LaTeX Engine
- Python 3.9+
Database & Auth:
- Supabase (PostgreSQL + Auth + Storage)
- Tectonic LaTeX Engine: Install from tectonic-typesetting.io
- Node.js 18+: nodejs.org
- Python 3.9+: python.org
- Supabase Account: supabase.com
# Install dependencies
npm install
# Copy environment variables
cp .env.example .env.local
# Add your Supabase credentials to .env.local
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
VITE_API_URL=http://localhost:8000
# Start development server
npm run dev# Navigate to backend directory
cd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Start FastAPI server
python main.py- Create a new Supabase project
- Run the migration script in your Supabase SQL editor:
-- Copy and paste contents from supabase/migrations/001_initial_schema.sql - Enable JWT Signing Keys in Supabase Dashboard:
- Go to Settings β JWT Keys
- Click "Migrate to JWT Signing Keys"
- Generate new API keys
- Update your
.env.localwith the new keys
src/
βββ components/ # Reusable UI components
β βββ Header.jsx # App header with navigation
β βββ Layout.jsx # Main layout wrapper
β βββ LoadingSpinner.jsx # Loading indicator
β βββ EditorSidebar.jsx # Resume editor sidebar
β βββ ResumePreview.jsx # PDF-style preview
βββ contexts/
β βββ AuthContext.jsx # Authentication state management
βββ lib/
β βββ supabase.js # Supabase client config
βββ pages/ # Main page components
β βββ LoginPage.jsx # User authentication
β βββ SignUpPage.jsx # User registration
β βββ Dashboard.jsx # Resume management dashboard
β βββ ResumeEditor.jsx # Main editor interface
βββ App.jsx # Root app component with routing
βββ main.jsx # React app entry point
βββ index.css # Global styles and Tailwind
backend/
βββ main.py # FastAPI app with LaTeX compilation
βββ requirements.txt # Python dependencies
βββ [generated files] # Temporary LaTeX/PDF files
supabase/
βββ migrations/
βββ 001_initial_schema.sql # Database schema and RLS policies
- package.json: Frontend dependencies and scripts
- vite.config.js: Vite build configuration
- tailwind.config.js: Tailwind CSS customization
- postcss.config.js: PostCSS configuration
- .env.example: Environment variables template
- users: User profiles (extends Supabase Auth)
- resumes: Resume metadata (title, timestamps)
- resume_data: Resume content (JSONB with layout + sections)
- Sign up/Login: Create account or sign in
- Create Resume: Click "New Resume" on dashboard
- Edit Content: Use the sidebar to edit sections
- Customize Layout: Adjust spacing, fonts, margins in Settings
- Preview: See live preview on the right panel
- Export PDF: Click "Export PDF" to download
Replace the template in backend/main.py in the generate_latex() function with your custom LaTeX code from Overleaf. The function receives structured data and should return LaTeX code.
Modify src/index.css and tailwind.config.js for custom colors, fonts, and styling.
- Row Level Security (RLS) policies ensure users only access their data
- JWT signing keys provide fast local token validation
- Modern Supabase Auth with email/password and OAuth options
- Auth verification: ~2ms (with JWT signing keys vs ~1s with legacy)
- Local development: Hot reload with Vite
- Production build: Optimized bundle with tree-shaking
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
MIT License - see LICENSE file for details
Tectonic not found:
# Install Tectonic
curl --proto '=https' --tlsv1.2 -fsSL https://drop-sh.fullyjustified.net | shSupabase connection issues:
- Verify your
.env.localhas correct Supabase URL and keys - Check if JWT signing keys are enabled in Supabase dashboard
PDF compilation fails:
- Ensure Tectonic is in your PATH
- Check FastAPI logs for LaTeX compilation errors