Skip to main content

A personal Mastodon reader and blog management tool

Project description

🐘 Mastodon is My Blog

My attempt to create an alternative Mastodon client based on a blogging interface instead of the infinite feed.

  • Transform your tweet storms into a static eleventy blog.
  • View your friends content in person centric way
  • View your special interests in a focused way
  • Write, edit, and manage your Mastodon posts in a clean, blog-style interface. (Kind of still in progress)

Installation

pipx install mastodon-is-my-blog
# initialize your accounts and API keys
mimb init
# launch webserver and website
mimb start

Documentation found here

Why?

Because I want to re-orient my mastodon usage from low value infinite doom-scrolling to high value finite activities.

I want the UI to be human centric and encourage seeing people first.

I want the UI to encourage medium length writing as much as reading, including thought out drafts, as well as short content and replies.

Implemented Features

  • Eleventy blog, published via GH Actions
  • Local Client, which is a Python FastAPI+Sqlite data source and an Angular Website.
    • Downloads all my data to sqlite, used by blog engine
    • Downloads data of people I follow, hashtags I follow
      • Blog-reader like interface for people
      • Content hub for special interests (pictures, videos, software links, etc)
      • Discussion page (primitive, not done, shows threads my friends participated in)
      • Writing Page (primitive, not done)
      • Admin Page

Some design decisions

  • Refresh is done by clicking a button. Content doesn't arrive in a stream.
  • Doesn't feel like a mixed feed. All feeds are filtered, either by person or topic.
  • The reader doesn't have any actions. Actions are done via link back to home instance.
  • Client side hashtag bundles because viewing a hashtag on Mastodon is broken.
    • Why? Because #python and #python314 and so on really should show in the same feed. This can only be achieved on vanilla Mastodon via the main feed, which is mixed with 99% unrelated content. Also, most hashtags have not much going on.
  • I call the friends a blogroll and group them by
    • Top Friends (people who are mutuals and have ever commented on my content)
    • Mutuals (they at least read my content)
    • Bots (No one is there, this is just content)
    • Broadcasters (Like bots, they write but never interact, at least not with me)
  • Retweets are suppressed everywhere. But not quote tweets.

Roadmap

  • Analytics page - show performance in one place, not on every post

Other good features

  • Treat Mastodon as your personal blog engine. Done! Finally.
  • Keep full control with local hosting. This would be ruinously expensive for me to host this for others.
  • Beautiful, distraction-free writing interface. Partial!
  • Engage with comments/replies easily. Not really!
  • Your data stays on your Mastodon instance. Sort of! If you use Github pages, you got a copy of your posts in two places now. The rest of your data is local to your machine.

Local Development

See SETUP.md for detailed setup instructions.

git clone https://github.com/matthewdeanmartin/mastodon_is_my_blog.git

# 1. Install the package
uv sync

# Optional: install Datasette helpers too
uv sync --extra datasette

# 2. Run interactive account setup
uv run mastodon_is_my_blog init

# 3. Start the backend
uv run mastodon_is_my_blog start --reload

# 4. Start the frontend (in another terminal)
cd web && ng serve

Open http://localhost:4200. If you skipped the access token during init, use the "Connect Account" button in the top bar (or the Admin page) to finish connecting that account — or add more accounts at any time, via OAuth or pasted API keys.

Static Storm Export

Build the Eleventy blog export for your own long posts and self-reply threads into docs\:

npm --prefix docs-src install
npm --prefix docs-src run build

Architecture

  • Backend: FastAPI + mastodon.py + SQLAlchemy
  • Frontend: Angular (standalone components)
  • Storage: SQLite for tokens and caching, Mastodon for content

More Roadmap

  • Draft saving
  • Analytics dashboard
  • RSS feed links. Maybe already done? Check eleventy.

Why not a single user instance?

First off, that is really a different concept. A single user instance without massive customization is still going to be same experience as mastodon.social, both for people reading your content and for you reading other people's content.

It costs a minimum of $10 a month and requires a server to be running all the time. Administering a server is a burden.

I want this to be as burdensome as using a mastodon client and have a way to use it for free.

License

MIT

Project Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mastodon_is_my_blog-0.4.1.tar.gz (46.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mastodon_is_my_blog-0.4.1-py3-none-any.whl (328.4 kB view details)

Uploaded Python 3

File details

Details for the file mastodon_is_my_blog-0.4.1.tar.gz.

File metadata

  • Download URL: mastodon_is_my_blog-0.4.1.tar.gz
  • Upload date:
  • Size: 46.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for mastodon_is_my_blog-0.4.1.tar.gz
Algorithm Hash digest
SHA256 191f4a1394456e73943a7539188a0f8554572675514b44ad4a048cdb820cd92f
MD5 dab4374a19f6ce6983de6889bc478915
BLAKE2b-256 38143c6f3db262662a77685d5ef2877e1fb8e9b2eb839e3c2475dc98b4a8843e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mastodon_is_my_blog-0.4.1.tar.gz:

Publisher: release.yml on matthewdeanmartin/mastodon_is_my_blog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mastodon_is_my_blog-0.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for mastodon_is_my_blog-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 71303df68e83466899de097c891bbd4343cfa9743c8011d8b0e2837823cb8735
MD5 4639ca40873af9ed4be3c360b3d0471c
BLAKE2b-256 5d7976ba2d6349fd03042c9ebedaee3892150489ca3b6d155545cc7bc99e6704

See more details on using hashes here.

Provenance

The following attestation bundles were made for mastodon_is_my_blog-0.4.1-py3-none-any.whl:

Publisher: release.yml on matthewdeanmartin/mastodon_is_my_blog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page