@armaina had a really cool idea for a self-hosted version of status.cafe. I’ve been looking for a project and this sounded fun and useful, so I started up tkr. The general idea is:
Very lightweight status feed - just plaintext posts with timestamps
Intended for self-hosted deployments
Single-user
Written in PHP. It sounds like this is the most compatible approach for VPS and shared hosting.
A small amount of profile information is stored in a sqlite database
Ideally, I’d like to provide:
programmatic setup and configuration
user-customizable themes via css
a reasonable default css theme
Atom and JSON feed support
Accessible design (this should be more a requirement than an ideal).
I’m open to suggestions about other useful features, but my primary goal is to keep this as focused and lightweight as I can, so I’d like to be thoughtful about how much I add.
Here are a couple screenshots of the current incarnation:
It’s very much work in progress, but the basic functionality works. I think I could have something that can be deployed without too much extra nonsense by the end of the week. I’ll deploy it to my site when I think it’s fairly stable, both because I’d also like this and because I’d rather be the first one to test it than foist that off on someone else.
I’m happy for any feedback, suggestions, or assistance, but I won’t be upset if none comes. I’m doing this because it’s fun and because I’d like to do more for the personal web community. I’ll update the topic as tkr develops.
My first thought with self hosted was being able to choose your own emoji selection for moods, since sometimes I want more than what Status Cafe has. But that’s a very idealistic feature and not at all required.
Sorry if this is a question with an obvious answer, but would we be able to log into our tkr account on other devices (ie, our phone) if we wanted to post an update on the go? I assume it’d require some set up on the user’s end to to, but it would be very useful.
Thanks! I actually hadn’t considered moods at all, so thanks for mentioning it. I’ll look into custom emojis, but I should at least be able to support a standard set for the initial version.
You’d be able to log in through a mobile web browser and post from your phone. There won’t be a true mobile app, at least to start, because I’ve never written one, but the web version will give people a mobile option.
Not much visible progress today, but I did get the setup all moved to a setup.php, so no more manually editing config files or creating users from the command line. When the site is initially deployed, it loads setup.php until the database is created and populated.
I added some basic customization. Site title, site description, and display name. I’m not sure how much else to add. I’d like there to be some ability to personalize this since it’s self-hosted, but I don’t want to overdo it. Definitely open to ideas here.
I did some housekeeping. It took me 4 days until I fell into my usual trap of getting annoyed by the file structure and rearranging everything. I’m happy with it now, though. I think it’s cleaner.
I got a bit of a start on the initial mood/emoji feature, but I’m getting hung up on the selector. Something to work on tomorrow.
Once the emoji selector is done, I need an admin page so that people can edit the customizable options after initial setup. I think that’ll pretty much cover all the basics.
So it’s coming along! I’ll hopefully finish the plumbing work tomorrow and then I can start working on making it more presentable.
Tonight I do have visible progress! I hope the frequent updates aren’t too annoying. I just don’t want you to think I immediately lost interest.
I added some things to the user profile: display name, description, website, and mood. I also tweaked the layout so the profile info is on the left and the ticks are on the right.
The mood page may be the most overdone emoji selector in history. I know it would generally be a dropdown. But this let me do it entirely in HTML, and I’ve started reading up on web accessibility so I attempted to make it accessible, too. It should be screen-reader friendly.
I’m thinking about adding a toggle to enable a javascript version of the site that would change this to a dropdown for people who would prefer that, but that would be a post-release thing.
Finally, there’s an admin page that lets you change all the configurable settings and reset your password.
I think that’s all the basic plumbing done. I have a lot more practice with backend stuff than with presentation, so I’ll probably run into more roadblocks with the work that remains to make this presentable. I’d also like to go back and make the homepage and admin page accessible.
But I have a pretty quiet weekend coming up, so I’m pretty optimistic that I can have something distributable by the beginning of the week.
Oh, thank you! I just learned about those on this project and wasn’t sure I was using them properly. I’m glad you like it!
I’ll stop worrying about the updates.
The presentation is coming together. It looks a lot like status.cafe, but that’s mostly because I think that site is really well done. I’m learning a lot from its html and css. I’ll be sure to credit them prominently in the README before this goes live.
I also realized that I still think in terms of desktops first. I’m old, I can’t help it. I made the layout more mobile-friendly by putting the timestamps above the ticks (yet another status.cafe similarity).
Apologies for vanishing and not delivering on my “beginning of the week” promise. I promise I’ve been busy! I’ve been doing a lot of refactoring.
It turns out that PHP went and grew up while I wasn’t looking, and I was still writing the same kind of PHP that I was back in the late 00s/early 10s. So I stopped writing for a bit to read up on modern PHP features and conventions.
I hope the result is that this is more like a real PHP app that someone would write in 2025. The downside is that once again there’s not a lot of visible progress. But upside is that as of today, when I do start putting something new together, it goes a lot faster. The code’s better structured and cleaner - or at least I think it is.
I do have a nice little navbar at the top of all the pages now. I think I could probably release it now. It needs polish - still no css uploads and I should probably start writing logs and adding real error handling. But it’s definitely usable.
Here’s a screenshot of the new navbarified version just to have something to show for the last few days.
I set this up so you can all see how it works in its current state and give me feedback. I’d obviously love to know if you find any bugs, but if you have suggestions for improvements or more features, please let me know that, too. The things I still need to add from my initial goal are:
CSS uploads
Accessibility validation
I figure that’s close enough for people to start kicking the tires, so feel free to get kicking! I’m a little anxious about putting the login in plain text here, but I’ll at least spoiler it.
username: notgreg
password: 32bitcafe
Please keep in mind that this is not intended for multiple users, so if more than one person is logged in at the same time you’ll clobber each other. If you’re worried about that, you could drop a note here when you’re playing around.
Also it’s entirely likely that I’ll end up blowing out the data a few times because I’m also using this to test the upgrade process. Just giving warning.
It’s getting more and more real! I’m going to work on that uploader and try to make the code that drives the initial setup less janky, but I think it’s getting close. Any suggestions or bug reports or critiques will only make it better, so please don’t hold back.
Thanks!
(Oh and I would particularly love any suggestions for making the css more customizable).