2024 development log

LOG 202412271244 #log

i've been building so much lately that i've fallen way (like way way) behind on documenting and sharing my progress. With 681 (1,451 including ai commits 🫒) commits-to-date this year, and most of that activity since the end of September, i've been trying to keep busy in the afterhours. in my workflow a commit in most cases represents a build of a project that requires testing. some of these screenshots are already out of date.

000 Github

a couple stray commits early in the year; nothing of real note. we'll go for a full journey from my first project of 2024 that planted the seed for everything that followed.

speedowpmter

001 Jf Types Demo

inspired in part by monkeytype.com. built in python with the help of chatgpt as opposed to claude who takes over as my copilot of choice for the remaining projects. this was my first python project in a long time. getting the initial mvp took a lot of trial and error, but replit made it quick to test and incrementally refine my way there. years back, this was a lot clunkier and tedious. enjoying the reduced friction i then boldly tried to turn my cobbled together python project into a portable installer/exe, but after a few failed attempts, hung it up as I had a real problem to solve.

md

this project went through several rebrands before I settled on md. obmd, markdown magic, teddys neat titles, tnt, being indecisive about project names you'll find will become a trend... md is a simple drag-and-drop tool that refactors markdown headings to smooth out a very specific rough edge in my workflow.

i attend a lot of meetings at work and for the past year i've been transcribing most of my internal calls using tactiq.io. i store all of my meeting notes in obsidian.md, which i've built out as my personal knowledge base/second brain for just about everything (i'm writing this very post in obsidian).

getting tactiq.io transcripts into obsidian is both manual and tedious. my daily note workflow has a very intentional heading hierarchy to help me stay organized, from meetings, to tasks, to notes or ideas, exports from tactiq.io just don't allow formatting options to fit in with how i do things.

enter md. i pass the tactiq.io exports through md using the drag-and-drop ui, and paste the refactored output into obsidian. it's still an extra step, but MUCH faster than manually cleaning up the markdown heading levels to fit into my hierarchy. my meeting section of my notes is at the h2 level, with meetings themselves at the h3, i needed my transcripts from tactiq.io to start at the h4 level, so that everything rolls up into the hierarchy neatly.

002 Md

in the future, i hope that tactiq.io will release an API that i can leverage to fully automate this transcript ingest through an obsidian.md plug-in, otherwise it's likely that I'll move to another service that will enable this type of automation. they just billed me another $200 for the next year; so I have until dec 2025 to figure that out πŸ˜…... they do have zapier, so it's likely i could figure out how to build it using that-- but honestly i don't like using zapier. would prefer they provide public endpoints so that i don't have to pay a 3rd party middleware for something i could build myself.

monday.com

from there, i briefly dabbled with creating an ai application to help me plan my teams weekly sprints in Monday.com using the OpenAI and Monday.com API's, but things at work were extremely busy, with overlapping migrations and implementation projects taking my full attention. this didn't go very far, code named InsecureScaryWaterfall, it was an old idea that had been in the back of my mind a long time. it never really got anywhere, felt like we were trying to fit a square peg into a round hole.

on june 20th, i shipped a quick turnaround input sanitization feature for a custom form on my companies website. not much to share there; the script is still working well in production today. a bunch of other small projects scattered over the next couple months but nothing that hit a repo. mostly head down pushing through end of quarter at work.

on september 4th, another special request came up at work and i shipped a content personalization feature for german visitors that rewrites content that the localization plugin my team adopted couldn't handle. this little project reminded me that when weird edge cases come down the pipe they often find their way onto my desk. the cogs were turning, the landslide was coming.

then, on September 24th i went on vacation and it all came crashing down. replit shipped ai agents and I started prompting until I hit limits and stayed on them. what years ago felt like climbing mountains, and just months ago had diminished to speedbumps, agentic development (and deployment) felt like sliding around on hardwood floors.. in socks.

first, i refactored md into the static deployment that processes the data clientside which lives on today (it was a lot rougher in it's first form and everything ran on the server). this way it doesn't cost me anything beyond maintaining my replit subscription.

then i dug back into trying to create a sprint planning tool that connects my teams monday.com project board with ai to answer questions about our weekly sprint outcomes. one of my teams kpi's is an sla for on-time requests; and if you know anything about monday.com then you know that can quickly turn into a pita. the shared project board we work in meant i could never properly implemented a managed sprint workflow for my team; so pulling sla outcomes out of the board was always a tedious and manual process. this tool was intended to solve that, but ultimately context window limitations and the unstructured nature of monday.com project board exports made the project difficult. i never got it working reliably, there were a couple of encouraging moments where successive questions would be answered correctly, only to have it break down and hallucinate or give conflicting answers.

this went through several iterations, and while i didn't ship anything, i was learning a lot about python, rest api's, and building, testing, and deploying in Replit.

pushing through this phase was super important, and looking back to the last 10+ years of learning more about web development, was always the stumbling block that prevented me from breaking out of the box I was in. whatever the variables were, this time, I pushed through and kept breaking stuff.

enter TeddysBlanket, branding on the nose, this was the reprieve. i was giving up on monday.com, taking it closer to home and trying to deliver something with more direct value. a tool that lets me ask questions about user activity in my orgs marketo instances using natural language, and get helpful and accurate responses courtesy of claude over anthropics api.

this is something that I have to do everyday as part of my job, and it's usually interrupting something else i'm working on chasing down a bug report so it was pretty easy to stay motivated. TeddysBlanket grew legs, started to run, and repeatedly tripped on his blanket falling on his face.

i ended up taking what i'd learned and started again with TeddysTricycle. i was like, i'm ready to ride! i was still making progress, and had the ai functionality largely in place; but the marketo api was giving me trouble. some heavy handed ai agent prompting and i ended up breaking everything and was so far down the rabbit hole that to go forward i essentially had to start over again.

TeddyTracks

so i did, enter TeddyTracks, i'd walked only to trip and fall, picked myself and got on a tricycle and rode straight.. into a guardrail, but now i felt like i was ready to connect the dots, Teddy was ready to Talk to the world, oh yeah, it was called TeddyTalks at first and then we changed the name to TeddyTracks πŸ˜‚.

i found myself more comfortable in replit, and vibing with claude.ai projects. i was combining their strengths and literally cracking the code.

TeddyTracks was quite a rollercoaster. multiple forks, fails, fixes, and finally, a glorious finish line.

dripping (literally) with personality, TeddyTracks went exactly how I envision a lot of future projects going. backend struggles turn into frontend sprints to rebuild confidence and give time and space to process and think before pushing through to the next milestone. we really went overboard with the css and javascript animations for what the app is intended to do. though, i'm not really intending to create gifs or videos of anything here at this stage so you'll have to use your imagination with the screenshots.

003 Teddytracks 1

since the application enables access to pii about user activity in marketo, i needed to make sure that the application was reasonably secure if i wanted to share with my team. secure password authentication, including user and admin roles ended up being pretty straight forward to implement. i have plans to add azure oauth support to properly secure it as i certainly don't trust my own implementation, or claude or chatgpt's ability to pen test it lol. for now the site also require explicit ip whitelisting in order to access, courtesy of cloudflare.

users are taken directly to the application page where they can choose a marketo instance to query, enter the email address for the user activity they want to ask about, some basic activity type filtering, and the number of days of activities to include as context for claude.ai.

003 Teddytracks 2

admin users can configure their marketo instances and anthropic api keys by clicking on the honey pot emoji, though this config page wasn't really necessary. all of the values are stored in Replit secrets and I typically just manage these details directly.

003 Teddytracks 4

when you submit a question, Teddy will pull the relevant data from marketo, send it to claude, and then present the output. all of the api requests are rate limited, with parallel processing for marketo. there are a lot of other configurable options, related to activities, number of activities, ect that i never created a frontend ui for that i may explore in the future.

003 Teddy Tracks 3

when using the app, the whole process takes between 10 and 30 seconds depending on the configuration. i could reduce the latency by streaming the output from Claude, but i had issues with formatting the streamed response, so have opted to just present it once complete.

marketo.rest

throughout the development of the TeddyTracks project, and the fact that it ended up working so well, i decided to fork and rebrand it to something more professional and retire Teddy. and low and behold, the domain https://marketo.rest was available for <$10/yr so i purchased it and pushed ahead to deploy. the renewal will be like $50 so i'll have to figure out whether i want to fork this into a community tool with proper user management and security/oauth support, and take in donations or find a revenue path, or just move it to a subdomain on my project site https://johnf.work (shh we'll get there).

i cleaned up the login page design and removed the dripping honey and bear theme.

004 Mkto Rest 0

and gave the app page the same treatment.

004 Mkto Rest 1

though i still kept some of the fun when a request is processing. (there is a matrix style code rain effect while requests are processing):

004 Mkto Rest 2

claude does a remarkable job at accurately answering questions, and consistently provided thorough analysis. ive spent a lot of time testing and manually auditing the accuracy of responses and claude just doesn't miss on important details.

004 Mkto Rest 3

004 Mkto Rest 4

in the future I plan to add custom instruction templates to allow for more targeted responses, figure out streaming support for the response without compromising on output formatting. perhaps i'll just enable response streaming for simpler requests where formatting isn't as critical and a single paragraph is sufficient. i also want to add additional ai models from providers like openai and long term, explore leveraging local models to process the activity data with any 3rd party api costs.

my success with marketo.rest propelled me forward into a flurry of functional projects, each one progressively expanding my capability and confidence to continue building stuff. to the point that i'm now currently running out of ideas of things to build, most of the little things i think up i can turn around an mvp in less than a day. it's like i need to start thinking bigger, but with bigger projects, comes bigger commitments, and i don't know that i'm ready to settle in on something just yet. it's a hard push-pull, this past week i've sat still more than i'd like because i don't know what to work on next, or if i should just turn back to an existing project and push it forward.

i'm hoping that writing this will prompt some ideas or help uncover a path and provide some clarity going into 2025.

anyway, woe is me right, back to the building..

the next three projects came together reactively as data projects came up at work. first i needed to help with some email domain analysis, and while it was definitely possible using excel, i turned to claude/replit. it's come in handy a few times since, and i had it deployed for awhile but now just run it on demand in replit if i need to analyze something.

Teddy's Domain Detective

Teddy's Domain Detective is a simple email domain analysis tool that takes raw email lists or csv's and generates helpful insights. built with python and streamlit, it features a simple interface for processing email data and generates visualizations of domain distribution patterns. the app's categorization system automatically classifies domains, making it useful for email list analysis. with support for multiple input formats and interactive data exploration capabilities, this project turned into a surprisingly powerful tool despite setting out to answer a simple question about how many users from certain companies we have in a dataset.

005 Domains 1

the app features a dark mode and light mode design, but light mode is banned on this website so we won't be talking about that further. when you paste in data or upload a csv, Teddy will locate email addresses (or complain if he can't find any) and identify the unique domains and provide a preview of the counts for each. you can download the output, or use the interactive table to sort/filter to whatever results you want.

005 Domains 2

Teddy also provides a series of visualizations, which honestly i didn't ask Claude for but he just one-shot the code for this whole feature.

top domains

005 Domains 3

categories distribution

005 Domains 4

and categories breakdown with interactive tables to preview and download results.

005 Domains 5

next up we have two more Teddy Toolsℒ️. Teddy's Ghost Emails which evolved into Teddy's Email Overlap Finder.

Teddy's Ghost Emails

is a simple csv analysis tool that will help you identify email addresses that don't exist in both of your data set. provide a source file, and then a comparison file and Teddy will give you a list of the gaps.

006 Gaps 1

you can preview the results, filter, and download a csv using the interactive table.

006 Gaps 2

Teddy's Email Overlap Finder

not the most eloquent name, but this tool is really just an evolution of the Ghost tool that offers more flexibility in filtering csv data based on email addresses.

007 Overlaps 1

once you upload your files, teddy will keep you in the loop as he processes the data and generates the results.

007 Overlaps 2

teddy then lets you download the overlaps, or the filtered data without overlaps. both datasets can be previewed and filtered using the interactive tables.

007 Overlaps 3

keeping with the trend of useful tools, though this one I feel like I really cooked and kinda forgot to tell anyone about it, lol. my team uses UTMs to track certain links and have a whole encyclopedia worth of rules and requirements/conventions to follow to help ensure that our data remains clean and we can actually pull insights from it.

right now the team, like many, use an excel sheet with a bunch of formulas and conditional formatting guardrails to try and keep people in check. I think everyone hates it, i know i do. thankfully i don't have to create a lot of UTMs, but i do have to advise on them from time to time and the excel sheet always make my skin crawl. enter UrchinTrackingMagic.

UrchinTrackingMagic

i had a different vision for this ui in my mind when i started, and this build didn't deliver on that vision, but it does deliver a fully functional and useful utm builder that my team could be using if i'd have shared it with them, oof!

008 Utm 1

it features input validation, so you can't do dumb stuff..

008 Utm 2

and confirms when you input them correctly. it also provides a shortened version automagically, while keeping a track of links you've already created.

008 Utm 3

if i was going to share it with the team, i'd definitely go back in and polish up the ui a little and would need to update for vendor changes and such... but i ended up building a totally different UTM builder later that was also never shared (or properly finished) but did deploy. a big restriction on UrchinTrackingMagic was that is processed server side and i didn't want that carry that cost in my replit account.

i needed bandwidth for all the other things that i was dreaming up to build. with a few apps under my belt, and confidence high, i started working on ideas for a new personal website for myself. a place to post my thoughts, showcase projects.

i always enjoy looking at other developers personal websites, and my vision was inspired by a bunch of cools sites i've explored over the years. the projects won't be exactly chronological from here on out, as e ended up building a side project related to this one (you're reading this on it) so we'll touch on both.

johnf.work

so far, just a bunch of simple little one-off projects, and my piece de resistance, marketo.rest which in reality is still just a simple little one-off project. my personal site requirements meant a much broader scope than my other projects so far, but I also had an advantage... i know wordpress really well and have been building websites with it, using mostly frontend tools, for almost 20 years.

this propelled claude and I right past the backend complexities that had been tripping me up and let me really sink my teeth into crafting something fun and unique for myself. i went through a lot of iterations on the visuals before settling in on whatever this could be described as..

009 Johnfwork 1

you can read words i've written about my projects

009 Johnfwork 2

read more about me, though i'm not actually a sloth..

009 Johnfwork 4

and check out a list of the projects i've gotten around to adding..

009 Johnfwork 3

while working on this, and notably the blog feature, i dreamed up a publishing workflow that would require too much effort to backfill into this project without fully derailing, and thus... log was born. and has created some issues with johnf.work. i'll have to figure out what i want to do with it long term, i certainly don't need two blogs. and log is sooo much better at being a blog for me.

log.johnf.work

the issue i had with publishing on johnf.work was that the ux was a bit clunky and i didn't want to undertake creating a rich text editor just to get my site up, and i also didn't want to resort to just plugging in some off the shelf thing. i want everything to be my own, fully custom. log is exactly that, i write in my obsidian.md vault like i do for everything, and if I want to publish i currently just drag and drop the note i want to publish' .md into the /logs/ folder in replit and click redeploy. if the post has images those get dragged into the /media/ folder. everything else is automagic, it converts the markdown files into fully featured html pages. in the future, i may explore building a plugin, and an api for log that will allow me to push posts to my site directly from obsidian.md.

010 Log 1

log is probably my favorite build so far, it's finally given me a way to write words on the internet, while also being literally something i built by myself from scratch (with my bud claude, of course) instead of my typicaly wordpress divi theme flip thats clunky and slow (sorry not sorry dreamhost). log is fast as fuck boy, clearing clean 100's on googles lighthouse performance and accessibility tests, despite running with just 0.25 vcpu and 1gb ram. i'm sure a lot of traffic would create issues, but i haven't even told anyone about this place yet. maybe one day.

010 Log 2

it was really fun adding all the little details and easter eggs that most people likely will never stumble into. one of the more obvious ones is the footer credit, which links back to johnf.work with a simple lil css flip:

010 Log 4A
010 Log 4B

Teddy's Paperless Lead Printer

from there we were just grinding away, adding content to johnf.work, when a data process at work needed some refinement. A 3rd party platform we use to capture quotes, which doesn't offer any customization, only captures phone numbers but we need us state geography in order to route leads; thus this little replit app was born. i simply grab an export from a report in the platform, drop it into the lead printer and whamo bamo, we fix all their limitations and generate a clean output file that can be loaded into ringlead and push the leads to sales in salesforce.

011 Paperless 1

it also served a second purpose, which connects into another little project that came up. the platform also doesn't let us extract utm data, they don't even capture it. instead they offer a single parameter that you can pass values to, so i wrote some simple js to capture utm's and pass them to that parameter as a unified string. it's lame and they're dumb for not giving more tracking support or customization options; took their development team a couple days to even answer my question about whether they could let us add utms to our reports, but i digress.

the app solves for all of this by extracting the utms and placing them back into separate fields in the export while processing the area codes into us state geos.

pizza

every saturday at my house we make a pizza and while our consistency has wavered lately because of holidays and such, it's a pretty consistent ritual.

thus, we keep the pizza vault secure (easy to reimplement things we've done before, so the marketo.rest authentication method returns in a lot of projects hah)

012 Pizza 1

pizza, or pizzatime, or whatever else i called it in the fever dream 2 hour sprint to build this react based mini-CMS, pulling from a lot of the foundational elements of johnf.work, but simplified and focused on logging my pizza and tracking a rating week over week. with ratings, tags, and notes, i can keep a nice lil pizza log. its mobile focused so snapping a pic on my phone before i devour a few slices typically isn't an issue. need to fully enable pwa support, otherwise it's kinda pointless and i could just use the journal app on my iphone, which i highly recommend.. but what's the fun in that when you can make stuff.

012 Pizza 2

naturally all of our pizzas have been 5/5 but i'll see if it ever dips, perhaps if i have to order in one day.

012 Pizza 3

its working well so far

012 Pizza 4

i dont have many complaints beyond the deployment method being rather expensive. taking $6.40 from my $40 replit deployment credits each month. i'm not sure what it'd work out to if i ran it as a autoscale deployment but probably still more than i'd be willing to pay long term, likely will find its way into the repo graveyard one day but i'm enjoying my work for now lol.

Watch in Order

im an avid law and order watcher, most nights after dinner i watch a couple episodes. i'm watching each series chronologically.. from the dvd box sets πŸ˜… it's been really hard to keep track, juggling between the different series and trying to remember which disc i'm on, it's proven impossible. after an ongoing dance of juggling discs in and out of the dvd player to find the right episode, watch in order was born.

013 Watch 1

i was able to get a consistently formatted index of the episodes by season for the three main series; Law and Order, Criminal Intent, and SVU from epguides. i pasted these into .md files and set to work with claude. i proposed using the markdown files themselves to drive the database creation, and a couple of quick iterations later we had it working. wrapped a frontend around it with some basic controls and voila, my law and order watching has been relatively seamless. the only time i fumble now is if i forgot to update the app.

013 Watch 2

the apps design will make it easy to flip and track other shows, or really lists of things in general and have the database driven by markdown files.

013 Watch 3

this is around the time that i started hitting some friction again, and burned through a couple of failed projects. the most notable was TeddyCSV which was an ambitious evolution of Teddy's Email Overlap Finder. the idea was to allow users make a data request using natural language, the app would match that with an existing process or, as needed, leverage the anthropic api to generate code for a new process to manipulate or process csv data. i got this working to a point, replicating some of the functionality of Teddy's Ghost Emails and Teddy's Email Overlap Finder, and even some of what Teddy's Paperless Lead Printer did. but never really got it singing, the results were inconsistent and it was very error prone. it seemed cool when it worked but most of the time it just wasted api tokens.

in the future, i think i'll revisit the premise, perhaps with a more limited/targeted scope. the dream is still alive on this one though, giving my team a one size fits all swiss army knife to do stuff with csv data so that i don't get tagged in to help with one-offs, it'd be a slam dunk.

moxie

this next project is kinda on pause, i still have big ambitions for this it but will need buy-in from the powers that be at work. it's just a half-working shell currently; inspired by an existing saas tool called stackmoxie, i wanted to build a marketo form testing and validation platform that allows me to run and validate the outcome of one off form tests while also being able to schedule them. letting me monitor the operation of critical lead flow processes for my organization and catch issues before anyone else can. stackmoxie can do a lot of this, but it costs money and building my own custom version allows me to tailor is around certain nuances of our workflows.

014 Moxie 1

i've met with stakeholders to pitch the concept and my next step is to submit an official project proposal for it but they voiced some concerns that have me wary about my ability to work on things like this in the future. we'll see how it goes.

014 Moxie 2

moxie can already navigate to pages on our site, load the form and render the fields successfully. it's been tricky, as this was my first real dive into using typescript (and surprisingly, you'll see a LOT more of it in the upcoming reprieve cycle lol). but we have the foundation in place to bring to the finish line.

014 Moxie 3

we'll just have to get those api blessings from the IT gods.

hitting some friction and hearing stakeholder concerns in my meeting took a bit of wind out of my sales, and alongside some other things that put me a little off balance around this time, I made the decision heading into the holidays that i'd shift my focus to creating things with less stake. just build for fun and close out the year shipping random and fun projects and just let my curiosity and creativity lead the way.

before we turn to those, my meeting with the gods also encompassed another tool..

denzel

denzel is another shell, handcuffed by lack of IT blessings, this project will bring the most potential value and time savings, but also carries the most concern with stakeholders. right now we have a lead process driven by email replies, and this process is prone to errors with responses being routed incorrectly or overlooked, it's been an ongoing issue and despite continuous attention we haven't been able to get to 100%.

the vision with denzel is that we can let claude read the replies, and with heavily constrained output tokens, tell us which route to use, and apply it in salesforce.

015 Denzel 1

i was actually able to get claude, through some direct testing using claude.ai projects, to do the job correctly in the brief testing (10/10 samples) with just simple custom instructions and claude was replying appropriate with a constrained response.

i need to model out the potential roi of this, i think it's the one that could grow legs as there simply aren't tools that do this cheaply that i've seen, and i think with good design the token consumption and llm sophistication required to do this properly will mean a big savings while also potentially allowing us to scale up our use of this tactic as opposed to exploring ways to retire it due to the issues. maybe we have to pivot and built a local model based solution. one way or another this one is worth figuring out.

okay, okay, before we crack the modelo and talk fun stuff, i forgot about one last work related project. remember Urchin Tracking Magic? which honestly, i feel like i nailed the name on that one, but ...

hawkurl

yay another utm builder, this one can be (and is) deployed as a static page with everything running client side. so it's better than urchin tracking magic, just doesn't sound as cool. though i kinda forgot i was developing it and never finished the qr code implementation. everything else is working pretty great though.

016 Utm2 1

this one may miss on the branding but it is the vision i had for the ux.

016 Utm2 2

input is validated, and filtered to help people avoid creating erroneous links.

016 Utm2 3

once i finish the qr code feature, it'll be pretty slick..

016 Utm2 4

you can build a bunch of tracked links, then copy them so that you can drop them into excel, or a document, or whatever. like i said i don't typically create a lot of utm links myself, so i don't really know why i've built multiple working utm builder tools but here we are. good form input validation experience i 'spose. anyways, enough work..

weather station

i've been getting into weather and meteorology lately, though, that's a whole other rabbit hole. this led me to building a simple weather station app that shows the current basic forecast details for my location, pulling data from the closest available station via the NWS api. it's really nothing fancy and something i plan to circle back to, likely closer to hurricane season next year lol. i plan to buy my own sensors and basic hardware to put in the backyard and then i'll have real local weather, until then the data is coming from just over a mile away from my house.

017 Weather 1

nothing quite like 77 degrees in late december... πŸ™„ we'll see where this one goes in the future, threw it together in just a couple of hours and haven't circled back to it. my first proper PWA, though it was only deployed temporarily. likely will keep this one offline until (..if) the aforementioned local sensor data comes into play and even then i may just host it locally on my network.

type

back to where i started, i still spend time on monkeytype.com occasionally. i like typing, obsess over mechanical keyboards, and idk, it's just a thing.

018 Type 1

i really like all the data monkeytype offers, and i wasn't really interested in recreating all that when they already do it so well.

018 Type 2

instead i was interested in taking a stab at refining my original take on the typing ux. it turned out a lot better this time, imo.

018 Type 3

this version is quite a bit more responsive, and surprisingly a lot easier to wrangle as it's written using typescript instead of python. python got comfy quicker, but the ceiling feels higher with typescript so i'm leveraging it in the vast majority of projects now. i was opposed to it at first, all of a sudden claude was just like "okay and we'll use typescript" and i was like wait what about python, i know python. and he was like, type safety john, we want type safety. whatever you say, claude. i got this far relying on his advice lol, what could possibly go wrong? πŸ₯΅

rahncraft

games, games could go wrong. they are fun, i like games. i've made a bunch of stuff so a game will be easy.. right? that's what claude told me. so there i was, thinking, what's a simple game? minecraft. sure sounds simple enough (i have never played minecraft).

idk, tic tac toe, connect four, there were a lot of starting points that made more sense but we jumped straight into the deep end. i worked with o1 to craft a project scope, and set to work with claude and rahncraft cobbled itself to life.

019 Rahncraft 1

it went surprisingly far, despite being terrible on performance. the 28 in the top right is indicating the fps πŸ˜…

you can destroy blocks by aiming at them and left clicking the mouse. or add new blocks of various types to the world, leaves (dark green), grass (light green), dirt (light brown), wood (dark brown), and stone (gray).

019 Rahncraft 2

the world also features birds which give score if you collect them by jumping into them.

019 Rahncraft 3

they are among some of the worst design one could imagine but hey, a birb is a birb. there is also a special block which changes colors, destroying the special block will progress you down into rahncrafts maze.

019 Rahncraft 4

currently, you'll actually just fall to your death, cause i dont really know what im doing and just scraping by building this lol. you have to look straight down and then respawn using the menu.. but, if you do that, then level two features a cave, and more birbs to collect for points. to get to the next level you have to find and destroy two special blocks.

019 Rahncraft 5

each progressive level adds an additional special block to find and collect. and the game has a simple menu to pause, respawn for those fun falling through the world occurences between levels, and an exit option.

019 Rahncraft 6

performance, despite going through a lot of iteration, was still really bad. i decided to pause on the more complicated 3d world and do something simpler.

lor

legend of rahn was supposed to be a step back in complexity, something i could charge ahead with. a 2d side scroller that i went a little too far before trying to test. i scaffolded up a bunch of the game, but claude and i miscommunicated some of the requirements and i ended up with something that was dependent upon a bunch of external assets that i didn't really have a way to make.

020 Legendofrahn 1

there was no game to start, this was all that was operable πŸ˜‚ i was able to generate some assets, but it turned into a mess and we were just blasting through without keeping a clean git repo so... we stopped without ever really getting started despite feeling like we'd build a game, lol.

020 Legendofrahn 2

it was time to try again but with better alignment with claude.

The Legend of Rahn: Pickle Quest

this one will take a little imagination, as i ended up breaking some of the game logic and never ended up fixing it. but it was working, you'll just have to trust me. i'll finish this game one day, don't worry.

020 Legendofrahnpicklequest 1

it still loads, but the level progression no longer works, but the premise was that rahn spawns in and there is a pickle and a barrel. he picks up the pickle, takes it to the barrel and poof, like groundhog day he wakes up and there is another pickle and another barrel, though in this new level there is also a curious pile of dirt.... rahn picks up the pickle takes it to the barrel, but nothing happens. so naturally he inspects the pile of dirt and low and behold, another pickle is buried in the dirt! he takes it to the barrel and poof! he wakes up and there are two pickles and some funny lookin dirt. the loop continues until rahn collects 20 pickles in one level, the barrel is now overflowing... now way a 21st pickle could fit in this barrel in the next level, and this is the point where i got to and started breaking things.

020 Legendofrahnpicklequest 2

ol rahn can't get to level 2 anymore, let alone. 20, and we got an extra barrel, it's a whole mess now.

but.. we also added controller support in this one, so you can move around with an xbox controller, i forgot to mention that we did that in rahncraft too, oh well. it was a journey ensuring proper keyboard and controller support for both, but now that's a fairly straight forward venture.

020 Legendofrahnpicklequest 3

each progressive level got a little bigger, and i planned on adding additional types of hidden pickles, but it was the pickle treasure room on the 21st level where it all fell apart. couldn't get that working because our lofty vision for the game kinda spiraled out of the control. you see im thinking that once you make it through 20 levels, that unlocks the actual game, this was all a dream of pickles for rahn to get to the pickle vault and start his quest for the golden pickle.

all the pickle vault code spaghetti stringing alongside the pickle quest minigame code and poof, it was going to be a big lift to keep going, and honestly the games kinda ugly, and i lost interest. i'll return to the premise one day when i can make it awesome.

blox

performance was top of mind as i made my second attempt at a minecraft like game. so focused in fact that i just called it blox and after finishing the foundation for this 60+ fps masterpiece, i got distracted by.. well, before we get into that lets at least look at blox cause it's pretty cool.

021 Blox 1

blox is a much bigger world, and it runs a lot smoother. there are 3 types of blocks this time, but with different health amounts. grass has 1 health, dirt 2, and stone 3. you can destroy blocks by left clicking or xbox right trigger, 1 click per block health. you can place new blocks by pressing e on keyboard, or x on controller. switch between block type using 1-3 on keyboard, or the d-pad on controller.

021 Blox 2

i added proper controller support for the menu system this time around, instead of just pause/resume via the start button you can also navigate between options and interact with them. keyboard navigation is also supported.

021 Blox 3

and some more control configurations, with a modular menu system allowing us to scale this up as we go.

021 Blox 4

blox runs in an essentially infinite worldspace, though as evidenced by the trail of blocks, you can't build anywhere; blocks have to connect to the generated foundation. otherwise, within that limitation the sky is the limit.

i'll come back to blox one day, live multiplayer with avatars, text and proximity voice chat are on the list of cool things i'd like to explore, as well as exploring graphical shader options, and different rendering optimization methods to push performance even further. for now, that's all blox does, the level progression, scoring, and special blocks from rahncraft haven't made it into blox yet, one day, one day.

rahn zen

rahn zen was really fun, i leaned into the things that worked, took some of the ideas i had brewing, and built a mini game site i'm excited to keep crafting on and optimizing.

https://zen.johnf.work

022 Zen 1

you start off with sleepy rahn sitting under a stream of words, with a pupper theme that pulls from a markdown file dictionary.

022 Zen 2

start typing and rahn will wake up and start joggin', keeping pace with your wpm. the faster you go, the faster he trots, and his tongue will stretch out so you really know when you're zoomin' along. your realtime and average wpm and accuracy stats will be shown along the bottom of the screen. rahn runs a meter for every word you type. here he's running just a quick 10 meter sprint.

022 Zen 3

once you hit the finish line as configured in the options log, rahn will go back to sleep but not before congratulating you and letting you know how you did!

that's not all rahn can do though, head over to the rahn menu to choose between the different games

022 Zen 19

in jump mode, rahn is out to collect 10 pickles without waking up a kitten or bonking into a barrel.

022 Zen 4

the kittens are artful masterpieces, don't shame me..

022 Zen 5

at least the barrels are better okay..

022 Zen 6

i made sure the pickles looked pickly enough that rahn would chomp 'em down as he ran by..

022 Zen 7

once he's gotten 10 pickles, he goes back to snoozin'. you can always hit escape to restart another run if you think rahn needs more pickles. he won't mind, trust me.

pickles aren't his only fav though, rahn also has a real hankering for blueberries. head over to the catch game and help rahn chomp down enough bloofberries (that's what he calls them) to get 20 pts and earn a nap!

022 Zen 8

if rahn catches a bloofberry he gets 2 pts, what a good boy.

022 Zen 9

if they land on the ground, rahn almost likes that better as he only gets 1 point and thus, more bloofberries πŸ˜‚

022 Zen 10

don't worry about keeping up with the bloofberries, they won't spawn very fast.. rahn'll have plenty of time to enjoy each one.

022 Zen 11

once rahns earned his nap he'll rejoice in his love for bloofberries and nod off for a napper.

more rahn fun to come for sure on zen, but, there is so much more to see. from the lofi chill background music you can toggle on in the log, to the various seasonal themes with day and night settings.

we'll bend a no light mode rule here since rahn is such a good boy.

we've got the classic zen day and you can see the various options available in the log here.

022 Zen 12

which also has the night mode you've seen up to this point.

then we have the desert theme

022 Zen 13

and it's night theme

022 Zen 18

and then the fall theme

022 Zen 14

and after dark

022 Zen 17

and lastly rahns favorite, with this thick shaggy coat, winter

022 Zen 15

which honestly really only works at night for me because that's like a whole flashbang of brightness

022 Zen 16

i usually stick to zen night mode, but there's plenty of variety.

did i mention that if you let rahn snooze he'll let out lil pupper dreams?

022 Zen 20

that's all rahn zen for now but it'll be a fairly active project. i plan to add some better mobile support, local weather to the clock with themes for that feature. actually fix the performance issues with jump and catch modes, make more modes, lots of things, lots of things.

super rahn pickles

remember that side scroller that kinda crashed and burned? well we're back, and this time it's a jumbly mess of forks and restarts and ultimately a super high performing foundation for me to build on in the future.

023 Super 1

you start off and super rahn is a sleepy boy in his bed. wake him up and collect pickles and bloofberries along the way to the bed on the other side of the level.

023 Super 2

each level will change in appearance slightly because why not, it was boring with the colors exactly the same all the time.

023 Super 3

bloofberries can be hidden in boxes, you'll have to jump into them to sprout the bloofy

023 Super 4

jumping is hard work, so if rahn gets hot you can always turn some snow on in the menu

023 Super 5

or if you dont want snow but like twinkles, you can switch to night and enjoy the stars (don't ask why some stars are in the ground okay)

023 Super 6

if you need a minute and dont want to leave rahn in the cold you can always pause the game

023 Super 8

multiple kinds of cold here of course, rain and snow, rahn likes weather too.

023 Super 7

and because i can be bothered to make music, you can enjoy some lofi music while you venture around with rahn. all of the settings are configurable in the game menu.

and that's pretty much all there is too it right now. ai baddies who try to stop rahn from collecting his precious bloofberries and pickles may come in the future, perhaps we explore making boss levels at certain milestones.

actually generate some sound effects and background music.. y'know..

it could turn into a real thing with some polish, the foundations all there now.

space rahn

rahn isn't really rahn here, but he's the hero character around these parts and that's that.

space invaders, a classic. welp, we made our own. not much time spent on this one honestly but progress continues to accelerate as i learn more and ai models get better and better. now it's time to dream bigger, or just go deeper on all the past things. still, idk.

024 Space 1

this ones kinda hard to capture in the same format (read: lazy manual screenshots) as it's fast paced, runs at 120+ fps, and has quite a bit more going on than the previous games. we've got three difficulty levels, which mostly impacts boss health but something we can connect into other systems in the future.

024 Space 2

once you start the game, you've got lil pickle shooter rahn down there, and the enemies above (who are currently just triangles cause, again, im no artist.. we'll polish up the art later) with their health bars displayed. rahns health is in the top left, along with score, current level, and his pickle cannon level.

024 Space 3

shoot pickles and kill enemies and they may drop glowing pickles, which power up rahns pickle cannon. if you complete a level and don't get lucky and receive a pickle power up, one will appear at the end of the level to ensure you don't fall behind the power curve. the game is fast paced but its still chill and not punishing, no rng frustrations here lol. you can also get lightning bolt power ups which will double your movement speed for a time.

024 Space 4

as you power up your pickle power, your pickle cannon will get more impressive and make it easier to mow through easier enemies.

024 Space 5

you can also get other power ups, like the ffwd (which is using a rwd icon lol πŸ™ƒ) which will double rahns pickle cannon fire rate.

024 Space 6

once you pickle your way through all the enemies in a level, you'll progress to the next.

024 Space 7

enemies will get harder and start to do stuff like zoom down and attack you, if you don't destroy them in time, they'll respawn as more powerful enemies with cannons that shoot back.

024 Space 8

so you'll have to be quick on the draw, note how we stuck with the no design theme for small enemies, and the shooty ones are just wider triangles barely distinguishable from the normal ones 😁

024 Space 9

keep progressing and you'll also bump into even faster enemies, almost ensuring you bump into at least some resistance along the way to...

024 Space 10

bosses spawn every 5 levels, they shoot back and shoot unpredictably. only a few hits and rahn will be bonk'd out for a snooze.

024 Space 11

fortunately, he's got his pickle cannon powered up by this level so bosses should be no sweat.

024 Space 12

the chaos will increase over time

024 Space 13

but rahn can just keep blastin his way through

024 Space 14

wave after wave

024 Space 15

boss after boss

024 Space 16

pausing for breaks as he needs to along the way.

and that basically concludes the fun things we've been working on. from there we ended up building the foundations of a github dev journal/timeline tool, because we were curious how many total lines of code we've wrangled with claude to make all the stuff above work. and that project ended up inspiring this post..

025 Journey 1

this really did start as asking a simple question, and thinking it was something i could just get from github but didn't know where to look. then claude was like, run this script, and i was like fuck it lets build.

025 Journey 2

click into a repo, see stats. api stuff isn't working perfectly yet so none of the details are accurate, or partial. but not bad for a couple hours, claude.

025 Journey 4

we'll see where it goes from here.

025 Journey 3

once i get all the data pulling properly, and clean up the design a bit, i may go back through and add some more details to each project i discussed above. (edit: i finished it, my 2024 development journey is complete, this post is something else though, i'll cover the finished product in a separate dedicated update instead of reworking this thing lmao.)

i'm also forgetting one of the ones i'm most excited about, and definitely a new area of exploration..

log time

if you've been reading up to this point, then you know i've been using obsidian.md for the past year, like a lot...

026 This Post 1

that's some words. oof, speaking of we've written 3210 words today i should go outside before it..... it is already dark outside. oh, well.. always tomorrow.

so like i was saying, obsidian right. my daily note flow is pretty dialed in, with md helping some with the transcript rough edge. another thing i wanted was an easy way to get timestamps for inline log entries throughout the day, without having to type or do anything special.

and thus the idea for the Log Time obsidian.md plug-in was born.

027 Log Time 1

and shipped..

027 Log Time 2

here is a sneak peak BTS with some light usage today.

027 Log Time 4

you type the heading level in, and if all the conditions are met, when you press space it'll place the current time in front of your cursor.

027 Log Time 5

voila.

we'll see where obsidian.md plug-in development takes us next. for Log Time, we'll add a setting menu so that it can be configured a bit so that others may adapt it to their own workflows and we'll see where things go from there as i publish it into the community manifest for discovery.

see ya in 2025, probably sooner 🫑