A terminal study streak tracker with Chrome focus sync.
Project description
StudyStreak
StudyStreak is a terminal-first study tracker for students who want a simple place to plan work, start focused sessions, protect a daily streak, and review what they actually studied.
It includes a Textual terminal app, cloud sync, subject/topic tracking, review notes, a timetable, achievements, and a companion browser extension for Chrome, Firefox, and Zen.
Preview
Install The Terminal App
StudyStreak requires Python 3.10 or newer.
pip install studystreak
Open the app:
studystreak
You can also launch it explicitly:
studystreak ui
Update later:
pip install --upgrade studystreak
First Setup
- Open
studystreak. - Create an account or log in.
- Choose whether to start the optional guided tour.
- Go to
Settings > Subjects. - Add your subjects, study websites, and topics.
- Press
Settings > Sync > Sync Now. - Install the browser extension and log in with the same account.
- Use Home, Sessions, Timetable, or Focus to start studying.
The app still works locally, but logging in enables cloud sync, browser extension sync, leaderboard data, cross-device setup, and browser focus-quality summaries.
Main App
Home
Home is the quick command center. It shows:
- account, server, sync, streak, and weekly goal status
- a next best action based on your recent study data
- visible buttons for
Enter Prepare Focus,F Focus, andS Skip - focus readiness, todo/review status, today's wins, and weak topics
- a setup checklist that disappears as you complete setup
Subjects
Subjects are the base of the app. Each subject can have:
- study websites
- topics
- study history
- focus-quality summaries from the browser extension
Use Settings > Subjects to add, edit, or delete subjects. Websites and topics sync to the browser extension.
Example websites:
https://pearsonactivelearn.com
https://quizlet.com
https://senecalearning.com
Example topics:
Integration
Circular motion
Databases
Organic chemistry
Sessions
The Sessions tab combines logging and editing.
Use Log Session to manually add study time with an optional topic and review note.
Use Edit Logs to:
- view session details
- change subject, minutes, topic, or review note
- delete incorrect sessions
StudyStreak protects streaks by date, so logging twice on the same day does not incorrectly create a two-day streak.
Review Notes And Topics
When you log a session or finish a focus session, you can add:
- what topic you worked on
- a short review note
Those topics feed the Home review queue and weak-topic suggestions. This makes the app more useful over time without needing a separate revision tracker.
Timetable
The Timetable tab lets you plan weekly study sessions by subject, day, start time, and duration.
When synced, the browser extension can show today's sessions and send notifications when planned sessions come up.
Focus Mode
The Focus tab runs focused study sessions from inside the terminal.
It can:
- choose a subject and optional topic
- auto-fill saved websites for that subject
- open all saved websites
- run a custom countdown
- run Pomodoro 50/10
- show a minimal focus screen with a large timer
- auto-log completed Pomodoro work blocks
- ask for a review note at the end
Leaderboard
The leaderboard loads from the StudyStreak server and has Today, This week, and All time views.
Rows show study minutes and current streak days, so users can see both effort and consistency.
Achievements
Achievements unlock as you add subjects, log sessions, use focus mode, protect streaks, and build better study habits. Sounds and notifications can be controlled in Settings.
Settings
Settings contains:
Weekly Goal: set the weekly study targetSetup Health: see what is still missingSync: upload and download cloud dataTour: replay or complete the guided tourUpdates: check PyPI for a newer app versionExtension: open browser extension setup guidanceAppearance: switch dark/light modeSounds: control UI, focus, streak, achievement, and notification soundsSubjects: edit subjects, websites, and topicsData & Privacy: export data, clear focus quality, or reset local dataFocus Import: offline/debug fallback for signed browser focus JSON
Browser Extension
StudyStreak Companion adds browser-based focus tracking and overlays.
It can:
- sync subjects, websites, topics, timetable sessions, and todos
- start and stop focus sessions
- show a movable timer overlay on webpages
- show a movable todo overlay on webpages
- let you check off todos from the overlay
- clear completed todo tasks
- track focused, distracted, and idle time
- use an 8 minute idle threshold
- run Pomodoro 50/10 with Work and Break labels
- upload completed Pomodoro work blocks
- ask for a topic and review note after stopping focus
- sync focus sessions and review notes back to the terminal app
- sync full focus-quality summaries
- use Strict Focus to redirect distracting sites to an allowed study site
- show timetable reminders from the account
Reminder, Focus, Todo, and Settings stay disabled until you log in, so account data does not carry across users by mistake.
Install The Extension
Firefox
Install from Firefox Add-ons:
https://addons.mozilla.org/firefox/addon/studystreak-companion/
Then open the extension, log in, and press Refresh Subjects.
Zen Browser
Zen is Firefox-based, so use the Firefox Add-ons version when possible.
If you are testing locally, follow the temporary install steps below.
Chrome
Chrome currently uses the local development folder.
git clone https://github.com/Chi-ChunL/StudyStreak.git
cd StudyStreak
Then:
- Open
chrome://extensions. - Turn on Developer mode.
- Click
Load unpacked. - Choose the
chrome_extensionfolder. - Open StudyStreak Companion.
- Log in and press
Refresh Subjects.
Temporary Firefox Or Zen Install
Use this for local testing:
python scripts/build_firefox_extension.py
Then:
- Open
about:debugging#/runtime/this-firefox. - Click
Load Temporary Add-on. - Choose
dist/firefox_extension/manifest.json. - Open StudyStreak Companion.
- Log in and press
Refresh Subjects.
Temporary add-ons disappear after restarting Firefox or Zen.
Extension Workflow
- Log in with your StudyStreak account.
- Press
Refresh Subjects. - Choose a subject.
- Check that Focus websites auto-fill.
- Save websites if you changed them.
- Add todo tasks if you want the overlay checklist.
- Enable Strict Focus or Pomodoro if needed.
- Press
Start Focus. - Use the webpage overlay or popup to stop focus.
- Add a topic/review note, or skip it.
- Open the terminal app and press
Settings > Sync > Sync Now.
Cloud Sync
StudyStreak uses this server by default:
https://chichi.hackclub.app
Cloud sync currently covers:
- encrypted profile backup data
- streak state
- subjects
- subject websites
- subject topics
- timetable sessions
- todo tasks
- focus sessions
- review notes
- browser focus-quality summaries
- leaderboard data
If you run your own backend, set:
STUDYSTREAK_API_URL=https://your-backend-url
Then launch the app normally:
studystreak
The browser extension points at the deployed StudyStreak server by default. To use a different backend, change API_BASE_URL in chrome_extension/background.js before loading or packaging the extension.
Command Line
Most users should use the TUI, but quick commands still exist:
studystreak
studystreak ui
studystreak log maths 30
studystreak today
studystreak streak
studystreak create-user alex
studystreak login alex
studystreak logout
studystreak users
Local Data
StudyStreak stores data in the user app-data folder instead of the project folder.
Windows:
%LOCALAPPDATA%\StudyStreak
macOS:
~/Library/Application Support/StudyStreak
Linux:
~/.local/share/StudyStreak
You can override this with:
STUDYSTREAK_DATA_DIR=/path/to/data
Privacy
StudyStreak stores local study data on your machine.
When you use cloud sync, StudyStreak sends the data needed to keep the terminal app and browser extension connected. Profile backup data is encrypted before upload. Some browser-extension sync fields are stored plainly so the extension can read them, such as subjects, websites, topics, timetable sessions, todos, focus sessions, and focus-quality summaries.
The extension may collect page domain activity during an active focus session so it can calculate focused, distracted, and idle time. It does not need this tracking when focus mode is stopped.
Offline signed JSON import remains available in Settings > Focus Import as a fallback/debug path.
Development
Clone the repo:
git clone https://github.com/Chi-ChunL/StudyStreak.git
cd StudyStreak
Install locally:
pip install -e .
Run the app:
studystreak
Run tests:
python -m unittest discover -s tests
Build the Python package:
python -m build
Build the Firefox/Zen extension folder:
python scripts/build_firefox_extension.py
Create a Firefox upload ZIP on Windows:
Compress-Archive -Path dist\firefox_extension\* -DestinationPath dist\studystreak-firefox.zip -Force
Useful JavaScript checks:
node --check chrome_extension/background.js
node --check chrome_extension/popup.js
node --check chrome_extension/focus_overlay.js
Backend Development
Install backend requirements:
pip install -r requirements.txt
Run the FastAPI server:
python -m uvicorn backend.main:app --host 0.0.0.0 --port 8000
The backend creates and updates its SQLite tables on startup.
Troubleshooting
The terminal app has no browser subjects
Add subjects in Settings > Subjects, then press Settings > Sync > Sync Now. In the extension, press Refresh Subjects.
Extension login says network error
Check that the server is online, your internet is working, and the extension has been updated/reloaded. Firefox users should use the Add-ons version or rebuild the Firefox extension folder after code changes.
Todo overlay does not appear
Log in first, enable Settings > Show todo overlay in the extension, and open a normal http:// or https:// webpage. Browser pages like about:, chrome://, moz-extension://, PDFs, and store pages can block overlays.
Focus overlay disappears on page changes
Reload the extension and use the latest Firefox/Chrome build. The overlay is injected into normal webpages and repaired when the page DOM changes, but browser-protected pages still cannot show it.
Websites saved in the extension do not appear in the app
Open the terminal app and press Settings > Sync > Sync Now, then check Settings > Subjects.
Review notes do not appear in Sessions
Sync the terminal app after stopping focus in the extension. Review notes are attached to focus sessions when you save the review panel.
Firefox says the temporary add-on disappeared
That is normal for about:debugging temporary installs. Use the Firefox Add-ons version for a permanent install.
The app feels out of date
Run:
pip install --upgrade studystreak
You can also check inside Settings > Updates.
Status
StudyStreak is in active development. The goal is to stay terminal-focused while making setup, browser sync, focus tracking, and review workflows easier for everyday students.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file studystreak-0.1.8.tar.gz.
File metadata
- Download URL: studystreak-0.1.8.tar.gz
- Upload date:
- Size: 947.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
712a294e000337bb451f8f4921f213b10452e355d016988875d0ac8c0afd1d18
|
|
| MD5 |
0e04e8e992726f1c34b7448e508ea134
|
|
| BLAKE2b-256 |
1bc1194a9b14e60b8a89e334e45b170570e682b24b50f608892724cc8945ff7f
|
Provenance
The following attestation bundles were made for studystreak-0.1.8.tar.gz:
Publisher:
publish.yml on Chi-ChunL/StudyStreak
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
studystreak-0.1.8.tar.gz -
Subject digest:
712a294e000337bb451f8f4921f213b10452e355d016988875d0ac8c0afd1d18 - Sigstore transparency entry: 1875395647
- Sigstore integration time:
-
Permalink:
Chi-ChunL/StudyStreak@f15145a43f4ea9aa13bbee9c24ef2639c735bba3 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/Chi-ChunL
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f15145a43f4ea9aa13bbee9c24ef2639c735bba3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file studystreak-0.1.8-py3-none-any.whl.
File metadata
- Download URL: studystreak-0.1.8-py3-none-any.whl
- Upload date:
- Size: 940.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5d987fde8fc65501aa6fe39724221c1f3f0055f5cd40ea982c8e2d321bf08f6
|
|
| MD5 |
879f4a9e87df489a409cc0d6cac22722
|
|
| BLAKE2b-256 |
e7ea5adf3903da7642141ee23db9fc371c6b77278f68d91d5630971aed7c1b08
|
Provenance
The following attestation bundles were made for studystreak-0.1.8-py3-none-any.whl:
Publisher:
publish.yml on Chi-ChunL/StudyStreak
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
studystreak-0.1.8-py3-none-any.whl -
Subject digest:
b5d987fde8fc65501aa6fe39724221c1f3f0055f5cd40ea982c8e2d321bf08f6 - Sigstore transparency entry: 1875395813
- Sigstore integration time:
-
Permalink:
Chi-ChunL/StudyStreak@f15145a43f4ea9aa13bbee9c24ef2639c735bba3 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/Chi-ChunL
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f15145a43f4ea9aa13bbee9c24ef2639c735bba3 -
Trigger Event:
release
-
Statement type: