I have long been inspired by Aaron Pareki and his pk3 tool for his website. With some searching, one can find other kinds of personal management systems on GitHub or other developers writing about their own personal api with links to other examples. As a developer myself, I have my own personal API that I am able to add to as wanted.
In the interest of choosing boring technology my personal api is powered primarily by django and celery .
Published Modules
While I have more modules I plan to clean up and publish in the future, I have split out a few that I also use in other projects. At some point I need to provide better documentation for many of these and some screenshots.
django-zakka
django-zakka
is my collection of helpers that I have pulled out so that I can reuse across various projects.
The two most useful are my zakka.http
module that wraps requests
to apply a consistent user agent to outgoing requests, and my zakka.conrib.celery
that adds a tasks
cli command to list and manually run any Celery task and re-adds the perodic_task
decorator that was removed from older versions of Celery.
django-mqtt
django-mqtt
is a module I wrote to connect mqtt and django.
This adds a mqtt
server command that connects to an mqtt broker and can then trigger actions in Django.
django-timeboxed
django-timeboxed is a module in development to help with time boxing tasks. This lets me set a timer for various tasks to help me keep focused. I have written some other modules, like a macos status bar app, to interface with it, but I need to do more cleanup before I publish everything.
Other Modules
Using django-admin startapp
, it is easy to create a new module for splitting up some of my code.
Splitting it up this way, makes it easier to split out if I think it will be more useful to other projects, or remove if it stops being useful.
django-latest
This is a module I hope to publish soon (with a better name as well).
This is a module I use to track the last time I did some kind of chore.
I can set a period such as daily/weekly/monthly, and then click a checkin
button any time I do that task.
Home Dashboard
While I use Home Assistant for some things, it is often much easier for me to write a custom dashboard in Django, and then query out to other data sources that I need.
- Dashboard Page - I have an overview dashboard showing a list of due tasks from
django-latest
in addition to a few other links. - Today Page - A list of all checkins from
django-latest
for today - Cat - Since I have a cat, I have a page specifically for checkins related to taking care of her.
- Room Pages - I also have a page for each room in my apartment, that lists related
django-timebox
favorites or relateddjango-latest
trackers.
Development Dashboard
Recently I have also started a development dashboard that queries my forgejo instance or todoist account to generate pages for that.
Advantages of a Personal API
Having a personal api, it is now trivial to write a quick celery
job for processing reports, a quick django
view, for any kind of dashboard view, and a long term, (mostly) low stress project that I can always hack on.
Using Forgejo
, I push Webhooks into my deployment system, so that I can automatically deploy on push, and get notifications as soon as the deployment finishes.
I also use the free version of sentry
to keep track of errors.