A full-stack React Native application for tracking job applications with a Node.js/Express backend and Supabase database.
job-tracking-app/
├── backend/
│ ├── config/ # Supabase configuration helpers
│ ├── routes/ # API route handlers (jobs, auth, comments)
│ ├── database/ # SQL migration scripts
│ ├── types/ # Shared backend TypeScript interfaces
│ ├── server.ts # Express server entry point
│ └── package.json
├── frontend/
│ ├── components/ # Reusable React Native components
│ ├── hooks/ # Custom hooks for data & form logic
│ ├── services/ # API clients and auth helpers
│ ├── utils/ # Shared utilities (dates, styling)
│ ├── App.tsx # Main application component
│ ├── tsconfig.json
│ └── package.json
└── README.md
- Job Management: Create, edit, and delete applications with company, position, status, and salary expectations
- Persistent Ordering: Drag and drop jobs to reorder them; the sort is saved server-side and survives app restarts
- Progress Timeline: Maintain a chronological list of comments for each job (add & edit comments)
- Timestamp Visibility: Display the last updated date on every job card and the exact time for each comment
- Status Filtering: Quickly filter jobs by
Wishlist,In Progress,Archived, or viewAll - Modern UI: Floating action button, modal forms, and clean typography
- Pull to Refresh: Manually refresh the job list to sync with the backend
- Node.js (v16 or higher recommended)
- npm or yarn
- Supabase account
- Expo CLI (for React Native)
- Navigate to the backend directory:
cd backend- Install dependencies:
npm install- Create a
.envfile with your Supabase credentials:
PORT=3000
SUPABASE_URL=your_supabase_url
SUPABASE_ANON_KEY=your_supabase_anon_key
-
Run the SQL scripts in
database/via the Supabase SQL Editor:fresh-install.sqlfor new projectsmigration_add_job_comments.sqlto upgrade an existing database with comment support
-
Start the server:
npm run devThe backend will run on http://localhost:3000.
- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install-
Configure API/Supabase URLs by either:
- Creating an
.envfile (EXPO_PUBLIC_API_URL,EXPO_PUBLIC_SUPABASE_URL, etc.), or - Editing
config.tsdirectly with the correct values (http://localhost:3000/api,http://10.0.2.2:3000/api, orhttp://YOUR_IP:3000/api)
- Creating an
-
Start the Expo dev server:
npm start- Run the app:
- Press
ifor iOS Simulator - Press
afor Android emulator - Scan the QR code with Expo Go on a physical device (ensure the device shares the same network)
- Press
GET /api/jobs— Get all jobs (with embedded comments)GET /api/jobs/:id— Get a single jobPOST /api/jobs— Create a new jobPUT /api/jobs/:id— Update job detailsPUT /api/jobs/reorder— Persist the order of a user's job listDELETE /api/jobs/:id— Delete a job
POST /api/jobs/:jobId/comments— Add a new comment to a jobPUT /api/comments/:commentId— Update an existing commentDELETE /api/comments/:commentId— Delete a comment
All endpoints are protected with Supabase Row Level Security to ensure each user only accesses their own data.
- Node.js
- Express.js
- TypeScript (strict mode)
- Supabase (PostgreSQL)
- CORS
- dotenv
- ts-node for development
- React Native with TypeScript
- Expo
- Axios
- Custom hooks and reusable components
- Typed data models shared across the app
Feel free to submit issues and enhancement requests!
MIT