Skip to content

Latest commit

 

History

History
89 lines (71 loc) · 2.3 KB

File metadata and controls

89 lines (71 loc) · 2.3 KB

ProgressTracker

A native desktop workout tracking app built with Go + Gio (gioui.org) and SQLite.

Prerequisites

  • Go 1.21+ (https://go.dev/dl/)
  • GCC / C compiler (required by go-sqlite3 CGo)
    • Windows: Install TDM-GCC or MinGW-w64
    • Linux: sudo apt install gcc
    • macOS: xcode-select --install

Build Instructions

# 1. Extract the archive
tar xzf progresstracker.tar.gz
cd progresstracker

# 2. Download dependencies
go mod tidy

# 3. Run directly
go run main.go

# 4. Build binary
go build -o progresstracker        # Linux/Mac
go build -o progresstracker.exe    # Windows

Features

  • 5 Workout Days from your program (Monday–Friday)
    • Monday: Chest
    • Tuesday: Back
    • Wednesday: Shoulders + Abs
    • Thursday: Arms + Abs
    • Friday: Legs
  • Log entries: weight, reps, sets, notes, date
  • Auto-calculated volume (weight × reps × sets)
  • Personal Best tracking (max weight + max volume per exercise)
  • Full history view with PB highlighted in gold
  • Charts: weight over time + volume over time (line charts)
  • Dark theme throughout
  • SQLite persistence in progress.db

Project Structure

progresstracker/
├── main.go
├── data/
│   ├── models.go       # Exercise definitions, Entry struct
│   ├── db.go           # SQLite operations
│   └── repository.go   # Repository pattern
├── logic/
│   ├── tracker.go      # Business logic for entries
│   └── analytics.go    # Chart data computation
└── ui/
    ├── app.go          # Main app state, layout, event loop
    ├── theme.go        # Dark theme colors
    ├── components.go   # Reusable UI components
    └── charts.go       # Line chart rendering

Database

SQLite file progress.db is created automatically in the working directory.

Schema:

CREATE TABLE entries (
    id         INTEGER PRIMARY KEY AUTOINCREMENT,
    exercise   TEXT NOT NULL,
    weight     REAL NOT NULL,
    reps       INTEGER NOT NULL,
    sets       INTEGER NOT NULL,
    volume     REAL NOT NULL,
    notes      TEXT,
    date       TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Screenshots:

HomePage TrackerPage