Skip to content
/ pace Public

Tiny AI app generating an image based on the Strava activity. 🚴 For enthusiastic athletes with love. 🫰

License

Notifications You must be signed in to change notification settings

mrbalov/pace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

333 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

One athlete is running. Another athlete is riding a road bicycle. Minimalistic style with dark colour tones.

Netlify Status

Netlify Status

Verify (All Packages)

Validate All Specs with OpenSpec (Static Validation)

Validate Specs with AI

PACE (Strava Activity Image Generator)

PACE (Personal Activity Canvas Engine) is an AI-powered Strava activity image generator that automatically turns your workouts into visually compelling images. It analyzes activity data and context to create shareable, expressive visuals for each Strava activity, helping athletes present their performance and stories in a more engaging and personalized way.

Note: This project is being developed and supported in collaboration with AIs.

Specification Validation Workflows

GitHub Actions workflows serve as the canonical validation, so no separate local test command is required. Validation happens entirely in CI using a two-stage workflow:

  • Static OpenSpec validation – runs the OpenSpec CLI against the repository, renders totals and a table showing every validated spec, and exposes the raw JSON for follow-on jobs. Failures block the run and unlock an AI fix pipeline that requires manual approval.
  • AI validation – scopes to the official openspec/specs tree, keeps a detailed table of each validated spec even when there are no violations, and logs prompts/notes for debugging. Only the tracked spec files are shown in the summary, and the job still reports every violation it finds.
  • AI-based violation fixing – triggered via a reusable workflow once validation fails and approval is granted. It runs CodeMie with the validation summary, captures the suggested changes, and opens a PR that clearly states it was generated by the agent.

Key Points:

  • Both validations run in PARALLEL
  • AI needs approval BEFORE it runs
  • View results in GitHub Actions Summary
  • PR merge re-triggers both workflows
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Developer Action: Push to main, open PR, or Manual Trigger β”‚
β”‚ (changes to openspec/**, workflows, validation packages)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β–Ό                     β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚ OpenSpec          β”‚ β”‚ AI Validation     β”‚
        β”‚ Static Validation β”‚ β”‚ (requires manual  β”‚
        β”‚ (runs auto)       β”‚ β”‚ approval first)   β”‚
        β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β–Ό                    β–Ό       β–Ό                 β–Ό
  PASS                  FAIL    FAIL              PASS
    β”‚                    β”‚       β”‚                 β”‚      
    β”‚                    β–Ό       β–Ό                 β”‚      
    β”‚             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
    β”‚             β”‚ Approve OpenSpec β”‚             β”‚
    β”‚             β”‚ fix (manual)     β”‚             β”‚
    β”‚             β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
    β”‚               Approved                       β”‚
    β”‚                  β”‚                           β”‚
    β”‚                  β–Ό                           β”‚
    β”‚             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
    β”‚             β”‚ AI Fix           β”‚             β”‚
    β”‚             β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
    β”‚                  β”‚                           β”‚
    β”‚             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
    β”‚             β”‚ PR created:      β”‚             β”‚
    β”‚             β”‚ agent/specs-fix- β”‚             β”‚
    β”‚             β”‚ {run_id}         β”‚             β”‚ 
    β”‚             β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
    β”‚                  β”‚                           β”‚
    β”‚                  β–Ό                           β”‚
    β”‚             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
    β”‚             β”‚ Developer reviewsβ”‚             β”‚
    β”‚             β”‚ & merges PR      β”‚             β”‚
    β”‚             β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
    └──────────────────┴───────────────────────────└──► DONE

Workflow Details:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ OpenSpec Static                            β”‚
β”‚ β€’ Scope: openspec/specs/                   β”‚
β”‚ β€’ Output: Table of all specs               β”‚
β”‚ β€’ On fail: Unlocks AI fix approval         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ AI Validation                              β”‚
β”‚ β€’ Approval: BEFORE running                 β”‚
β”‚ β€’ Scope: openspec/specs/                   β”‚
β”‚ β€’ Output: Detailed spec table              β”‚
β”‚ β€’ On fail: Unlocks fix approval            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Fix Workflow                               β”‚
β”‚ β€’ Approval: AFTER validation fails         β”‚
β”‚ β€’ Action: Agent creates PR                 β”‚
β”‚ β€’ Result: Dev reviews β†’ merge β†’ re-trigger β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

About

Tiny AI app generating an image based on the Strava activity. 🚴 For enthusiastic athletes with love. 🫰

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published