QuickTick is a full-stack crypto dashboard built with Node.js, Express, Handlebars, and MongoDB. Users sign in with Google, track live cryptocurrency market data, favorite coins, and keep personal notes.
- Google OAuth login/logout with Passport.js
- Persistent user sessions with MongoDB-backed session store
- Live cryptocurrency table (CoinMarketCap API)
- Favorites table with star toggle and persisted favorites per user
- Notes section (create + delete)
- Light/dark theme toggle with saved preference in
localStorage - Responsive dashboard and login page
- Custom favicon and refreshed UI styling
- Backend: Node.js, Express
- Templating: Handlebars
- Auth: Passport +
passport-google-oauth20 - Database: MongoDB + Mongoose
- Session Store:
connect-mongo - Frontend: HTML, CSS, vanilla JS, Materialize, Font Awesome
- Deployment: Vercel
.
├─ app.js
├─ config/
│ ├─ db.js
│ └─ passport.js
├─ controllers/
│ ├─ coins.js
│ └─ todos.js
├─ middleware/
│ └─ auth.js
├─ models/
│ ├─ Todo.js
│ └─ User.js
├─ public/
│ ├─ css/style.css
│ ├─ js/main.js
│ └─ images/
├─ routes/
│ ├─ auth.js
│ ├─ coins.js
│ ├─ index.js
│ └─ todos.js
├─ views/
│ ├─ layouts/
│ │ ├─ main.hbs
│ │ └─ login.hbs
│ ├─ partials/
│ │ └─ _header.hbs
│ ├─ dashboard.hbs
│ └─ login.hbs
└─ vercel.json
Create config/config.env for local development:
PORT=5000
MONGO_URI=your_mongodb_connection_string
SESSION_SECRET=your_session_secret
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_CALLBACK_URL=http://localhost:5000/auth/google/callback
API_KEY=your_coinmarketcap_api_key
NODE_ENV=developmentFor Vercel Production, set the same variables in Project Settings and use your deployed domain for callback:
GOOGLE_CALLBACK_URL=https://your-domain.vercel.app/auth/google/callbackAlso add that exact callback URI in your Google Cloud OAuth client settings.
npm install
npm run devApp URL: http://localhost:5000
npm run dev- Start server with watch modenpm start- Start server normally
vercel.jsonuses modernfunctions+routesconfig (no legacybuilds), so Vercel Project Build Settings are no longer ignored due to legacy build config.- OAuth callback/domain mismatches can cause login to land on older deployments. Keep
GOOGLE_CALLBACK_URLand Google OAuth redirect URIs aligned with the active domain.