PixelPast is a local-first, open life data platform that transforms fragmented digital traces into a coherent, explorable timeline of your life.
Inspired by the GitHub contribution grid, PixelPast visualizes years (or decades) of activity as a multi-scale calendar heatmap and allows drill-down into rich, cross-linked day-level stories.
PixelPast — Your life, rendered as pixels.
We all generate digital traces:
- Photos and videos
- Calendar events
- Music listening history
- Financial transactions
- Trips and location history
- Work activity
- Sports and health data
But these data streams live in silos.
PixelPast unifies them into a single time-based model and turns them into an interactive, searchable life chronology.
It is not social media. It is not cloud-dependent. It is your data — structured, queryable, visual.
At its core, PixelPast revolves around a chronology-centered canonical model.
Event and Asset are both first-class temporal entities:
Eventcaptures meaningful occurrences such as meetings, trips, and song playsAssetcaptures stored digital objects such as photos, videos, and documents
Everything becomes a time-based event or asset:
- A photo
- A meeting
- A song play
- A bank transaction
- A trip
- A work activity
These events and assets are aggregated into daily activity summaries and rendered as:
- Multi-year calendar heatmaps
- Zoomable month views
- Detailed day timelines
- Filtered cross-source views
The Python package is intentionally split by architectural role:
src/pixelpast/persistence: persistence models, repositories, and database integrationsrc/pixelpast/api: API schemas and HTTP-facing contractssrc/pixelpast/ingestion: source connectors and ingestion pipelinessrc/pixelpast/analytics: derived data jobs and analytics logicsrc/pixelpast/cli: command-line entrypointssrc/pixelpast/shared: small cross-cutting helpers only when clearly justified
This keeps the repository aligned with the explicit Raw -> Canonical -> Derived
separation described in the project documentation.
Install the package in editable mode and run the baseline checks:
pip install -e .[dev]
ruff check .
pytest
The React UI skeleton lives in ui/ and mirrors the architecture described in
the UI documentation.
Use the full stack locally with:
pip install -e .[dev]
npm install --prefix ui
pixelpast dev
For the deterministic demo timeline instead of database-backed projections:
pixelpast dev --demo
This starts:
- the FastAPI backend on
http://127.0.0.1:8000 - the Vite UI on
http://127.0.0.1:5173
In normal development the UI talks to /api/... on the Vite origin, and Vite
proxies those requests to the Python backend. Optional direct API overrides can
still be configured via VITE_PIXELPAST_API_BASE_URL.
Contributions, ideas and new connectors are welcome.
Before contributing, please review:
The MIT License (MIT) Copyright (c) 2026 Philip Daubmeier
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.