A streamlined dashboard for Cory Levy to review Z Fellows applications with Airtable integration.
- Host on CloudFlare with login instead of settings popup?
- Shortcut to expand link with better regex, preview link on hover
- No previews for all sites blocking iframes, fix previews being cutoff when o clicked
- Fix search bug + search for hidden candidates
- Write tests
- Fix flag move down with reject, make flag move down instant
- Off by one error causing non display of most recent app
npm installCreate a .env file in the project root with the following variables:
# Your Airtable personal access token
# Get it from: https://airtable.com/create/tokens
AIRTABLE=pat_xxxxxxxxxxxxxxxxxxxxx
# Your Airtable Base ID
# Found in the URL when viewing your base: https://airtable.com/BASE_ID/...
AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX
# The name of your table containing applications
AIRTABLE_TABLE_NAME=Applications
# Optional: Server port (default: 3000)
PORT=3000When creating your personal access token at https://airtable.com/create/tokens, ensure it has:
- Scopes:
data.records:readanddata.records:write(write needed for status updates) - Access: Your applications base
npm startThe dashboard will be available at http://localhost:3000
The application automatically maps the following Airtable fields to the dashboard:
| Airtable Field | Dashboard Field |
|---|---|
| First Name | First Name |
| Last Name | Last Name |
| Name | Full Name (split into first/last) |
| Project name | Company/Project |
| Phone | Phone |
| Birthday | Birthday |
| Location | Location |
| Technical? | Technical |
| Previously applied? | Previously Applied |
| Stage | Stage |
| What is the project... | Project Description |
| What problem are you solving? | Problem Solving |
| What expertise do you have... | Expertise |
| Who are your competitors... | Competitors |
| What have you worked on... | Past Work |
| What's the nerdiest thing... | Nerdy |
| What drives you? | What Drives You |
| What non-traditional things... | Non-Traditional Background |
| Tell us about a risk... | Risk or Challenge |
| Please list or describe... | Achievements |
| Website | Website/Links |
| Video Link | Video |
| Dream Cofounder | Cofounder |
| How did you hear... | How Heard |
| Help Needed | Help Needed |
If your Airtable uses different field names, edit airtableService.js and update the FIELD_MAPPINGS object.
| Key | Action |
|---|---|
P |
Stage 1: Review |
I |
Mark for Interview |
E |
Mark as Done |
Z |
Undo last action |
Shift+Z |
Redo |
- Live Airtable Data: Fetches applications directly from your Airtable base
- AI Scoring: Optional OpenAI-powered scoring (run
runAIScoring()in console) - Keyboard-Driven: Quick status changes with hotkeys
- Dark Mode: Toggle with the moon/sun button
- Resizable Sidebar: Drag the sidebar edge to resize
- Zoom Controls: Adjust text size with A+/A- buttons
- Undo/Redo: Full history for status changes
- Verify your
AIRTABLEtoken is correct - Check that the token has
data.records:readscope - Ensure
AIRTABLE_BASE_IDmatches your base - Confirm
AIRTABLE_TABLE_NAMEmatches your table name exactly
- Your Airtable table might be empty
- Check that your token has access to the specified base
- Your Airtable field names might differ from the expected mappings
- Edit
FIELD_MAPPINGSinairtableService.jsto match your column names