Skip to content
kaanddemirPublic

About

A personal study dashboard for tracking habits, managing courses, calculating grades, and staying productive.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

StudyHub

StudyHub Logo

A personal study dashboard designed to help students track habits, manage courses, calculate grades, and boost productivity.


Overview

StudyHub is a widget-based dashboard tailored for students. It replaces scattered productivity tools with a single, cohesive interface: exam dates, GPA, notes, habits, and a focus timer all live in one place.

There is no backend, no account, and no database. It is a vanilla JavaScript app built with Vite and Tailwind CSS, and everything it knows is kept in your browser's localStorage. The whole thing is a static bundle — the published build under docs/ is what GitHub Pages serves.

Core Features

Study Management

  • Dashboard: Customizable widget layout with drag-and-drop ordering.
  • Courses: Course list plus a detail page for materials, tasks, and per-course notes.
  • Exams: Upcoming exam tracking with dates and countdowns.
  • Cheatsheets: Collected quick-reference sheets, each with its own detail page.
  • Weekly Schedule: Grid timetable for recurring classes.
  • Grade Calculator: Weighted grade and GPA calculation.

Productivity Tools

  • Focus Timer: Pomodoro with configurable work and break intervals.
  • Stopwatch: Track pure study time with precision.
  • Habit Tracker: Daily habit monitoring with streak counters and progress bars.
  • Digital Notebook: Rich text editor with multiple paper styles (lined, grid) and infinite scrolling.
  • Scratchpad: Freehand drawing surface with a saved gallery.
  • Bookmarks & Highlights: Keep links and saved snippets next to the work they belong to.
  • Widgets: Clock, photo, stats cards, weekly activity chart, and mini games.

Personalization & UX

  • Theme Engine: Curated color presets or your own custom accent color.
  • Visuals: Glassmorphism UI with smooth animations and transitions.
  • Responsive: Optimized for desktop, tablet, and mobile, including safe-area insets.
  • Onboarding: First-run setup that seeds the dashboard with your details.

Localization

Full localization support, currently English (en) and Turkish (tr).

Current Limitations

  • AI Tutor: Currently a UI prototype; backend integration is pending.
  • Cloud Sync: Data is stored locally on the device; there is no cross-device sync.
  • Mobile App: Available as a web app; native iOS/Android apps are on the roadmap.
  • Partial Backup: Export writes the main studyhub_data record only. Habits, the grade calculator, Pomodoro settings, the scratchpad, and the widget layouts live under their own localStorage keys and are not included — see Data Storage.
  • One Network Request: The app itself sends nothing anywhere, but index.html loads the Inter typeface from Google Fonts, so the page is not strictly offline.
  • Clearing Site Data Clears Everything: There is no copy anywhere else. Export before you reset a browser profile.

Tech Stack

  • Build Tool: Vite 6
  • Core: Vanilla JavaScript (ES6+ modules), no framework
  • Styling: Tailwind CSS 3.4 with PostCSS and Autoprefixer
  • Icons: Inline SVG
  • Storage: Browser localStorage

Getting Started

Requires Node 18+ (Vite 6's baseline) and Python 3 for the launcher. There is nothing else to configure: no .env, no services, no database.

1. Clone.

git clone https://github.com/kaanddemir/studyhub.git
cd studyhub

2. Run.

python run.py

It checks the setup before starting and prints where to open the app:

  StudyHub
  ────────────────────────────────────────────
  Open      http://localhost:5173/studyhub/
  Data      browser localStorage, nothing leaves the machine
  Stop      Ctrl+C

Ctrl+C stops it. Missing setup — no Node, a Node too old, a port already taken — is reported before anything starts, with the command that fixes it. npm install does not have to be run first: when node_modules is missing, run.py installs the dependencies itself and says so.

The /studyhub/ in the address is not a typo. The site is published under that subpath on GitHub Pages, so base in vite.config.js puts the app there in every mode; the server root is empty.

Configuration

Both settings are environment variables and both are optional. PORT (5173) chooses the port; the dev server is bound to it strictly, so a port that is taken is reported rather than silently swapped. MODE chooses what to run: dev (default, hot reload), build (production bundle into docs/), or preview (build, then serve the result the way GitHub Pages will).

PORT=5174 python run.py
MODE=preview python run.py

Deploy

The site is published with GitHub Pages from docs/, which is why vite.config.js sets outDir: 'docs' and base: '/studyhub/' rather than the usual dist.

MODE=build python run.py

That rewrites docs/. Committing it is the deploy — there is no pipeline behind it.

Project Structure

studyhub/
├── public/                 # Static assets copied verbatim (logo)
├── src/
│   ├── components/         # UI components, one per page or widget
│   ├── data.js             # Default state, load/save against localStorage
│   ├── translations.js     # en / tr strings
│   ├── security.js         # escapeHTML, used on every interpolated value
│   ├── main.js             # App entry, router, theme restore
│   └── style.css           # Global styles and Tailwind layers
├── docs/                   # Production build, committed and served by Pages
├── index.html              # HTML entry point
├── run.py                  # Entrypoint: python run.py, Ctrl+C stops it
├── vite.config.js          # base and outDir for Pages
├── tailwind.config.js
└── LICENSE

Data Storage

StudyHub is local-first. Nothing is uploaded, and there is no server to upload it to — every record is written to your browser's localStorage under the origin you opened the app on.

The main record is studyhub_data (profile, courses, exams, cheatsheets, notebook, schedule, stats). Several features keep their own keys alongside it: habit_tracker_data_v3, grade_calc_data, pomodoro_settings, dashboard_notes_list, scratchpad_current, scratchpad_gallery, photo_widget_image, photo_widget_zoom, and the dashboardLayout / coursesLayout / cheatsheetsLayout widget orders.

  • Backup: Settings → Export downloads studyhub_backup_<date>.json. It contains the studyhub_data record; the separate keys above are not in it.
  • Reset: Logging out clears all of the keys listed here and returns you to onboarding. It is a factory reset, not a sign-out.

License

This project is licensed under the MIT License.

Footer

Built by heykaan.dev

About

A personal study dashboard for tracking habits, managing courses, calculating grades, and staying productive.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages