A Tinder-style swipe app to review your calendar events and plan for 2026.
- Swipe to rate: Drag cards right (keep), left (drop), up (meh), down (skip)
- Keyboard shortcuts: Full keyboard navigation for power users
- Persistent storage: IndexedDB with localStorage fallback
- Pre-loaded notes: Existing notes from CSV appear in the reflection field
- Auto-categorization: Events tagged by keywords
- Analytics: Monthly mood, category breakdown, top keep/drop lists
- Responsive: Card-sized on desktop, full-screen on mobile
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build| Action | Keys |
|---|---|
| Keep (→) | Arrow Right, D, L, Space |
| Drop (←) | Arrow Left, A, J |
| Meh (↑) | Arrow Up, W, K, S |
| Skip (↓) | Arrow Down, X, Q |
| Go back | Z, Backspace |
| Add note | N, Tab |
| Save note + Keep | Cmd/Ctrl + Enter |
| Save note + Drop | Shift + Enter |
| Cancel note | Escape |
npm install -g vercel
vercelnpm run build
# Drag 'dist' folder to netlify.com/dropnpm run build
# Push 'dist' contents to gh-pages branchyear-review-app/
├── src/
│ ├── main.jsx # Entry point
│ ├── App.jsx # Router + state management
│ ├── components/
│ │ ├── ImportView.jsx # CSV upload/paste
│ │ ├── SwipeView.jsx # Main swipe interface
│ │ ├── SummaryView.jsx # Analytics dashboard
│ │ ├── EventCard.jsx # Draggable event card
│ │ └── ProgressBar.jsx # Progress indicator
│ ├── hooks/
│ │ ├── useDatabase.js # IndexedDB persistence
│ │ ├── useSwipe.js # Swipe gesture handling
│ │ └── useKeyboard.js # Keyboard shortcuts
│ ├── utils/
│ │ ├── constants.js # Config and shortcuts
│ │ ├── parseCSV.js # CSV parsing
│ │ └── analytics.js # Stats calculations
│ └── styles/
│ └── index.css # Tailwind + custom styles
├── package.json
├── vite.config.js
├── tailwind.config.js
└── index.html
The app accepts CSV exports from Google Calendar. Required columns:
title(orsubject,event,summary,name)date(orstart,start date)
Optional columns:
locationnotes/description/reflection/comments— pre-loaded into reflection field
- Google Calendar API integration
- Apple Calendar (.ics) import
- Cloud sync
- Share results
- Year-over-year comparison
- React 18 — UI
- Vite — Build tool
- Tailwind CSS — Styling
- React Router — Navigation
- idb — IndexedDB wrapper