Skip to content

anazeneli/year-review

Repository files navigation

Year in Review 2025

A Tinder-style swipe app to review your calendar events and plan for 2026.

Features

  • 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

Quick Start

# Install dependencies
npm install

# Start dev server
npm run dev

# Build for production
npm run build

Keyboard Shortcuts

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

Deploy (Free)

Option 1: Vercel (Recommended)

npm install -g vercel
vercel

Option 2: Netlify

npm run build
# Drag 'dist' folder to netlify.com/drop

Option 3: GitHub Pages

npm run build
# Push 'dist' contents to gh-pages branch

Project Structure

year-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

CSV Format

The app accepts CSV exports from Google Calendar. Required columns:

  • title (or subject, event, summary, name)
  • date (or start, start date)

Optional columns:

  • location
  • notes / description / reflection / comments — pre-loaded into reflection field

Future Enhancements

  • Google Calendar API integration
  • Apple Calendar (.ics) import
  • Cloud sync
  • Share results
  • Year-over-year comparison

Tech Stack

  • React 18 — UI
  • Vite — Build tool
  • Tailwind CSS — Styling
  • React Router — Navigation
  • idb — IndexedDB wrapper

About

Personal project for a yearly review + goal setting

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages