You are browsing as a guest. Sign up (or log in) to start making projects!

javim-dev

@javim-dev

Joined June 1st, 2026

  • 12Devlogs
  • 3Projects
  • 3Ships
  • 45Votes
Ship ✨ Blessed

I made a simple todolist app that runs on the terminal. It has a beautiful TUI, persistent storage, due dates and much more!

I've learnt a lot while making this project and how it came out. The devlogs are pretty long so I'll keep this ship message short, just know that I've uploaded a demo video that you can find in the project's readme :)

Check the releases page for binaries: https://github.com/javiermm8/cli-todolist/releases

  • 5 devlogs
  • 18h
  • 9.26x multiplier
  • 200 Stardust
Try project → See source code →
Open comments for this post

3h 4m 9s logged

Ready to ship

I’ve spent these 3h mostly on implementing the reminders feature, sadly I couldn’t find a good enough solution and had to drop the feature.

I’ve tested multiple go libraries but just couldn’t find one that reliably sent notifications across all platforms. Also, all of them sent desktop notifications instead of something more terminal-related which is what I had in mind. And then, after fighting with creating a background process for hours I decided that it simply wasn’t worth the effort, so I decided to not implement reminders and delete all reminder-related features already implemented in the UI. The due date feature remains intact.

It’s sad but I think it’s the best decision to keep the app consistent and manageable. Chasing processes in activity monitor to stop notification loops was fun though!

But not all the time in these 3 hours was wasted. I was able to add a button to reset the due date of a TODO and did a general cleanup of the code to prepare it for release.

0
0
4
Open comments for this post

3h 0m 51s logged

More progress

I can almost see the next ship, I’ve made a lot of progress.

Main improvements:

  • Upgraded the design and functionality of the view that allows the user to change due date and reminder. All due date functionality now work.

Some bug fixes + minor improvements:

  • TODOs now keep the correct metadata after any other todo is deleted. Previously, description, due date and reminder used to be swapped between TODOs.
  • Made description input box wrap text instead of letting it go out of the box.
  • Updated help messages.

Things left to do:

  • Reminders
  • Add a button to reset the due date and reminder.

After spending quite the time working with the time package I now think that our understanding of time is broken. Years should have a set amount of days, months a set amount of days and weeks. It would make my live much easier.

0
0
2
Open comments for this post

5h 48m 49s logged

Last devlog of the day

I implemented a lot of stuff in this 5 hours. Here you have a list:

  • Help messages on most of the views.
  • A brand new TODO view that allows the user to see more information about a given TODO and change more stuff like it’s due date(not implemented yet), reminders(not implemented yet) and description.
  • A brand new view for changing a given TODO’s due date and reminder toggle.
  • Added a dot at the end of the welcome message.
  • Added a more celebratory way of completing a TODO rather than just deleting it.
  • Added warning when terminal size is too small.
  • bug fixed and small upgrades like remembering the selected item when going back to a list.

I already wrote way too much on the last two devlogs and it’s already late so I’ve kept this one brief :)

0
0
4
Open comments for this post

54m 24s logged

Persistent storage works again

After almost an hour of coding I was able get persistent storage working again and fix a couple of bugs.

In the last devlog I explained that because of the project’s rewrite I disabled persistent storage. The project now asked for the user’s name and supported multiple todolists so the previous logic didn’t work.

I thankfully was able to reuse a lot of code from the last version(mostly the file handling stuff). Now the project stores data on disk this way:

  • One .cli-TODO-config.json file which contains the user’s name.
  • One .cli-TODO-data.json file which contains the slice of todolists in json.

Both files get stored in the same directory in which the program runs.

Bugs fixed:

  • When the user left a todolist view by clicking the title of that todo would still be displayed on the border. Not anymore.
  • Other minor bugs that mostly appeared during the development of persistent storage. Like closing a file too early(then, if I tried to write to it again it would crash the program and leave the terminal in a broken state).
0
0
2
Open comments for this post

5h 13m 53s logged

I used to be the number one hater of the stardance review process(you get pretty tired of it after having to review the same slack bot 15 times but with different names) but after reading the feedback other people have left on my shipped projects I’ve changed my mind.

Initially I decided to ship this thing quickly so I could get the sticker, but after seeing that a lot of people liked this project(and the Happiness meter too, check it out on my page) I’ve decided to keep improving it with the suggestions reviewers left.

I’ll start with fixing the number one complaint, the devlogs. I still stand by my belief of “ship first, talk later” but I recognize that people enjoy reading this devlogs and they also force me to think twice about what I implemented and the decisions I made.

Enough talk, what did I do in this 5h of coding time? Well, I basically rewrote the whole thing. Now there’s a new starting flow. Much more personalized, it even asks for your name! I tried to keep the todo selection logic mostly intact because it was a pain to write. Sadly I wanted to implement overflow handling and ended up having to rethink and rewrite a lot of code.

Other features I implemented:

  • The app now scales dynamically, filling the whole terminal, like a real TUI. Instead of the fixed values on the previous version. This was a pain to change by itself and took a lot of time to get the correct relative values but I’m quite happy of how it came out.
  • Multiple todolists! A lot of reviewers asked for this and I’m happy to deliver.

Things I want to add that reviewers asked for:

  • Due time for the TODOs
  • Maybe a reminder system? I’ll have to look into it, people have asked for this but I’m unsure about leaving a gorutine or a cron job running in the background of a reviewers computer.
  • A more celebratory way of completing a TODO than just deleting it.

I won’t change the AI declaration because it still applies to the first ship(even though the second is basically a rewrite) but in this one I tried to use even less and go back to good ol stack overflow.

One reviewer asked me to make a mobile app for this, I tried to port it to ios using gomobile but it was a mess and simply not worth the effort so I sent the original go code to an agent and asked it to port it to swift. For a vibedcoded prototype it works pretty well so I’ll explore that option too.

I still have to work on the persistent storage, it’s going to have to be more complex.

Lastly I would like to thank again to all the reviewers that took the time to write thoughtful reviews, it means a lot to me. Some people even went out of the way to test the builds for windows and linux that I couldn’t test, thanks a lot :)

0
0
2
Ship ✨ Blessed

A simple cli todolist made using gotui.

It has persistent storage on disk too :)

There's a demo video on my latest devlog and on github, binaries are on github too.

  • 1 devlog
  • 7h
  • 3.31x multiplier
  • 28 Stardust
Try project → See source code →
Open comments for this post

7h 3m 37s logged

I’m tired but it’s finished

Seven hours logged this weekend. I made a simple cli todolist made using gotui. It has persistent storage on disk :)

Here you have a demo video, binaries are in github too.

0
0
7
Ship

# HackClub Happiness Meter
TRY IT HERE: https://happinessmeter-frontend.javim.dev/

Earlier this month, I created “HackClub Happiness Meter API” for the YSWS RaspAPI. The problem is that nobody used it. Probably because it’s an API, and most people don’t have an API client at arms reach. So I decided to create a frontend for it!

Check my latest devlog for more info. Also check:
- Github: https://github.com/javiermm8/HackClub-Happiness-Meter-Frontend

Want to learn more about this API? Here!
- API Github: https://github.com/javiermm8/HackClubHappinessMeterAPI
- API Docs: https://happinessmeter.javim.dev/docs

  • 6 devlogs
  • 12h
  • 8.21x multiplier
  • 102 Stardust
Try project → See source code →
Open comments for this post

1h 17m 3s logged

I’M SHIPPING IT

First of all, I know that I haven’t been putting much effort into my devlogs recently. I prefer to work in silence and talk about my work once it’s finished.

Some context

Earlier this month, I created “HackClub Happiness Meter API” for the YSWS RaspAPI. The problem is that nobody used it. Probably because it’s an API, and most people don’t have an API client at arms reach. So I decided to create a frontend for it.

Why react?

Why not? I already knew a bit about React, and this was the perfect opportunity to learn a more. However, having now made the API (backend) in Go, I realized that I hate React(and for that matter web development in general) with all my heart. Backend development is much better. If I ever need to make a front end again, I’m absolutely vibecoding it.

Storytelling

There isn’t much to say here. The main difficulties I encountered while developing this app were::

  • The design(thanks Tormentika, you saved the aesthetics of this project).
  • Not getting my IP blacklisted address by Cloudflare.

For the sake of the story, I’m going to say a little more about the second one, adding a touch of ‘storytelling magic’ (just note that this happened at 11 pm Spanish time and I hadn’t slept enough):

At the time, I was trying to implement the Status feature. What I didn’t realize is that if the function that fetches the state is inside of a React component, it will be called every time the component is re-rendered. If the status feature then changes something in that component (which it absolutely did), it creates a loop that constantly requests the status from my API. On top of that, when my API rate limits my IP (I’m very proud of that rate limiter I put there for the extra points in Raspapi), it sends back a 429 (as it should), and for reasons unknown, the Status feature fetches faster. I’m talking about dozens of requests per second. Thankfully, I was able to stop it and fix it before Cloudflare had to step in and block me.

Extra help

I’m terrible at design. You can see how bad the design was in the previous devlogs. So, thank Tormentika for telling me which colours to use where! Another day survived without having to learn colour theory!


Enough talk. GO TRY IT NOW
https://happinessmeter-frontend.javim.dev/

0
0
2
Open comments for this post

1h 52m 42s logged

UPDATE: New Stats page, Happiness Friend now works, the layout adapts for mobile, status on the header(status and stats update every 30s).

I still have to clean up everything and add error messages. But it looks great.

While making writing the status feature I accidentally made a loop. At least I know that my rate limiter works :)

If anybody has any suggestions please tell me, especially about the design(I’m bad with colors).

0
0
2
Open comments for this post

1h 39m 10s logged

Great progress! Rewrote fetch related functions to be asyncronous. Implemented error message when the user inputs wrong auth credentials. Now there are three auth states: unauthed(not logged in), bad-authed(wrong credentials) and authed(all good) and profile, auth and entry display messages according to that state. Entry displays a message when an entry is submitted(and 200 is sent back from the user). Added more info in Intro. Reordered grid(I still have to fix that a bit). Getting closer to release!

0
0
3
Open comments for this post

4h 43m 46s logged

Built the basic skeleton of the web page plus some basic fetch to the API using user provided credentials. The Auth logic works but still needs error messages, same for the profile area. Everything is still in a very early stage.

0
0
1

Followers

Loading…