Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Empty file removed .github/.gitkeep
Empty file.
Empty file removed .github/ISSUE_TEMPLATE/.gitkeep
Empty file.
46 changes: 46 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Bug report
description: Report a reproducible IronLog problem
title: "[Bug]: "
labels: [bug]
body:
- type: markdown
attributes:
value: Please remove personal fitness data, photos, API keys, and signing information from every attachment.
- type: input
id: build
attributes:
label: Build or commit
placeholder: Version name, commit SHA, or build date
validations:
required: true
- type: input
id: device
attributes:
label: Device and Android version
placeholder: Pixel 7, Android 16
validations:
required: true
- type: textarea
id: steps
attributes:
label: Reproduction steps
placeholder: Tell us exactly what you did and what happened.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true
- type: textarea
id: evidence
attributes:
label: Screenshots or sanitized logs
- type: checkboxes
id: privacy
attributes:
label: Privacy check
options:
- label: I removed personal data, API keys, and signing information.
required: true
42 changes: 42 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Feature request
description: Propose a focused improvement to IronLog
title: "[Feature]: "
labels: [enhancement]
body:
- type: textarea
id: problem
attributes:
label: Training problem
description: What becomes difficult during or around a real workout?
validations:
required: true
- type: textarea
id: outcome
attributes:
label: Desired outcome
description: Describe the result, not only a UI control.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
- type: dropdown
id: area
attributes:
label: Area
options:
[
Workout logging,
Plans,
Recovery,
Progress and stats,
Iron Ledger,
Widgets,
Data portability,
Health Connect,
Intelligence,
Other,
]
validations:
required: true
20 changes: 20 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## Outcome

What user-visible problem does this change solve?

## Changes

- Describe the most important implementation change.

## Verification

- [ ] Focused tests pass
- [ ] `testDebugUnitTest` passes
- [ ] `lintDebug` passes
- [ ] `assembleDebug` passes
- [ ] Visual or device checks are attached when relevant
- [ ] No keys, keystores, personal data, databases, photos, or build outputs are included

## Risk

Call out persistence, migration, lifecycle, notification, camera, Health Connect, import/export, widget, and signing implications.
52 changes: 52 additions & 0 deletions .github/assets/ironlog-hero.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/assets/screens/home.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/assets/screens/recovery.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 26 additions & 0 deletions .github/assets/training-loop.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file removed .github/workflows/.gitkeep
Empty file.
37 changes: 37 additions & 0 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Android CI

on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read

concurrency:
group: android-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
verify:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Check out source
uses: actions/checkout@v7

- name: Set up Java 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v6

- name: Verify wrapper permissions
run: chmod +x gradlew

- name: Test, lint, and assemble debug
run: ./gradlew testDebugUnitTest lintDebug assembleDebug --no-daemon
28 changes: 28 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Gradle
.gradle/
build/
app/build/
**/build/

# Kotlin compiler
.kotlin/

# Local config
local.properties

# IDE
.idea/
*.iml

# Keystore (don't commit secrets)
*.jks

# OS
.DS_Store
Thumbs.db

# Local agent/design working files
.agents/
.impeccable/
artifacts/
PROJECT.md
1 change: 0 additions & 1 deletion .nojekyll

This file was deleted.

26 changes: 26 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Contributing to IronLog

Thanks for helping improve IronLog. Changes should preserve three properties: workout logging remains fast, the primary record remains trustworthy, and optional integrations do not become requirements for basic use.

## Before opening a change

1. Search existing issues and pull requests.
2. Keep the change focused and explain the user-visible outcome.
3. Do not commit API keys, `local.properties`, keystores, fitness exports, progress photos, or generated build output.
4. Add or update tests for behavioral changes.

## Local checks

Run the relevant focused tests while developing, then run the full gate before opening a pull request:

```bash
./gradlew testDebugUnitTest lintDebug assembleDebug
```

Use `gradlew.bat` on Windows. Release builds require your own local signing material and are not part of the public CI gate.

## Pull requests

Describe the problem, the chosen behavior, risk areas, and how you verified it. Include screenshots or a short recording for visual changes. Body-map, camera, widget, notification, Health Connect, and lifecycle changes should be checked on a real device when possible.

The repository uses a personal-use source license. Opening a contribution does not change the project license or grant rights to the IronLog name, store identity, or signing keys.
40 changes: 40 additions & 0 deletions DESIGN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
scope: github-and-product-brand
source: PRODUCT.md and app/src/main/java/com/ironlog/app/ui/theme/IronLogThemes.kt
status: active
---

# IronLog design system

## 1. Direction

IronLog should read like a precise training instrument: dark, direct, and energetic at the moment of action. The visual signature is a forge-orange signal moving through a restrained black-and-steel environment. Recovery green and earned gold appear only when they carry meaning.

## 2. Color

| Role | Dark | Light | Use |
|---|---:|---:|---|
| Background | `#000000` | `#F6F7F8` | Main field |
| Surface | `#0D0D0D` | `#FFFFFF` | Raised information |
| Border | `#252525` | `#D8DCE1` | Structure |
| Primary text | `#FFFFFF` | `#111111` | Headlines and values |
| Secondary text | `#A8A8A8` | `#525861` | Supporting copy |
| Forge | `#FF4500` | `#D93600` | Primary action and motion |
| Recovery | `#00C170` | `#087F4D` | Ready/complete states |
| Earned | `#FFD700` | `#9A6A00` | Milestones only |

## 3. Typography

Use Lexend in the Android product where bundled and system sans-serif in repository graphics. Headlines are heavy and compact; metrics are large with tabular numerals; explanatory text stays regular and readable. All-caps labels are reserved for short operational signals, with visible tracking.

## 4. Shape and layout

Prefer one dominant composition over repeated feature cards. Use 10–18 px radii for product surfaces, 1 px structural borders, and square or pill forms only when they communicate a control or status. Keep the GitHub hero editorial: wordmark and promise on one side, a single animated training instrument on the other.

## 5. Motion

Motion must explain a training loop: load, effort, recovery, record, repeat. Use simple transforms, stroke dashes, and opacity changes; avoid elastic motion and perpetual high-frequency effects. Typical duration is 1.8–6 seconds, with slow ambient rotations no faster than 12 seconds. Under `prefers-reduced-motion`, disable every animation and render the meaningful final state.

## 6. Usage rules

Do not use gradients as decoration, glass effects, emoji icons, stock gym photography, or hand-drawn pseudo-product art. Do not make orange the background of large text areas. Claims in README graphics must match implemented code and current validation. SVGs need semantic titles/descriptions, adaptive colors, unique IDs, and successful XML/render checks before publication.
48 changes: 48 additions & 0 deletions PRODUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
type: brand
audience: lifters who want fast, trustworthy workout tracking without making cloud accounts or subscriptions the center of the experience
status: active
---

# IronLog

## Purpose

IronLog is a local-first Android strength-training companion. It helps people record a session quickly, understand recovery, follow a plan, and keep an honest record of their work. The product should feel useful between sets, not like a social feed or a spreadsheet squeezed onto a phone.

## Promise

Train. Recover. Prove it.

IronLog keeps the primary workout record on the device, makes backup and export explicit, and treats intelligence as an optional aid rather than a requirement for basic use.

## Personality

- Disciplined: clear priorities, precise metrics, no ornamental noise.
- Candid: earned progress is more important than inflated motivation.
- Forged: dark, tactile, athletic, and durable without becoming aggressive.
- Capable: powerful features remain understandable during a real workout.

## Visual language

The core identity uses near-black surfaces, hot forge orange, white type, recovery green, and sparing gold. The interface uses strong numeric hierarchy, compact labels, firm borders, and generous breathing room around primary actions. Motion should describe state, progress, or flow; it should never become ambient distraction.

## Content principles

- Lead with the action or outcome.
- Use plain training language.
- Make privacy and storage behavior explicit.
- Separate shipped capabilities from future plans.
- Avoid hype, fake precision, and claims that depend on unavailable services.

## Anti-references

- Generic neon-gym marketing and smoky bodybuilding imagery.
- SaaS card grids that give every feature equal weight.
- Cloud-first language for a product whose core works locally.
- Gamification detached from completed training.
- Decorative animation that ignores reduced-motion preferences.

## Accessibility

Public-facing graphics must remain legible in light and dark GitHub themes, preserve useful contrast, avoid communicating status with color alone, and provide a static state when `prefers-reduced-motion` is enabled.
Loading