Crafter Hours Development Log

2025

January

Wednesday, January 8 2025

Stream RecordingProject Code

  • Set up basic HTTP server with Guile Fibers
  • Established basic route handlers
  • Basic page rendering with SXML
  • Created record type for the package model

Monday, January 13 2025

Stream RecordingProject Code

  • Created a basic sqlite schema for the package model
  • Implemented basic CRUD operations for package
  • Split out package model into its own module
  • Updated the package list and detail pages to load from the database
  • Attempted to set up a coop REPL server to no avail

Wednesday, January 15 2025

Stream RecordingProject Code

  • Figure out how ELPA repositories expose their package information
  • Download the archive-contents file and process the contents, determine structure
  • Insert initial package details into our sqlite database
  • Update package details page to display version and description

Monday, January 20 2025

Stream RecordingProject Code

  • Fleshed out data model to add package-author and package-source
  • Revamped SQL schemas to add tables for package_author, package_authors (relation table), and package_source
  • Updated insert-package! procedure to update package and related tables with information from package metadata
  • Attempted to update code to import package archives but failed due to technicalities

Wednesday, January 22 2025

Stream RecordingProject Code

  • Integrated trev’s fixes for syncing package archives
  • Split out database population into a Scheme script sync-archives
  • Split out server startup to a script start-server
  • Split server handling into the (site server) module
  • Split current view templating into (site views *) modules
  • Established basic (site db) module to abstract database handling
  • Integrated existing scss->css code to generate a cached stylesheet for all pages

Monday, January 27 2025

Stream RecordingProject Code

  • Set up a REPL-driven workflow for live UI development
  • Add routes and views to show all keywords and packages by keyword
  • Add SQL queries for keyword IDs by name and packages by keyword
  • Improve the site CSS somewhat to make it more readable

Wednesday, January 29 2025

Stream RecordingProject Code

  • Created basic routes, views, and schema for the user type
  • Create route and form for user login (no cookies yet)
  • Created the schema for package tips

Wednesday, February 5 2025

Stream RecordingProject Code

  • Draft out basic package tip authoring experience with Datastar (no users, no SQL)
  • Write a basic Datastar SSE library

Monday, February 10 2025

Stream RecordingProject Code

  • Implemented a full login/logout flow with Datastar
  • Used jwt tokens to store session details
  • Added an authenticated wrapper for abstracting session checks in handlers

Wednesday, February 12 2025

Stream Recording (Part 2) ⋅ Project Code

  • Finished tip authoring experience with DB interaction
  • Added link to tip author profile
  • Added initial Markdown formatting for tip text
  • Added basic tip voting (not backed by DB yet)

Monday, February 17 2025

Stream RecordingProject Code

  • Created a DB schema update framework
  • Created a table to store applied migrations
  • Wrote unit tests to verify that the framework works
  • Moved current table initialization queries to first migration

Wednesday, February 19 2025

Stream RecordingProject Code

  • Prepared the site for deployment with Guix
  • Packaged the current site code in Guix
  • Set up a basic server configuration
  • Set up a Shepherd service to run the Guile app
  • Set up an nginx reverse proxy for hosting the site
  • Set up a place to host the database file (under /var/db)

Next Time

  • Run an initial package sync script on profile activation (?)
  • Fix any lingering issues that affect production
    • Password hashing
    • Session token secret
    • Stable package ID strategy
  • Implement package repo data sync/merge?

Backlog

  • Add migrations for:
    • Tip votes
    • Vote count per tip
    • Add a link to user’s Emacs config repo in profile
    • Adding the “I use this” mapping for packages
  • Add author details page to list which packages they wrote/maintained
  • Implement proper session expiration
  • Load session token secret from an environment variable, etc
  • Improve the internal API for generating reponses with page bodies
  • Flesh out CSS for all pages
  • Do proper password salting in the database
  • Finish porting ELPA, NonGNU ELPA, and MELPA package details into our database
  • Search for packages by name on the site
  • Improve package details page to display all information
  • Package listing page should use a table with columns
  • Define the strategy for periodically updating package details (upserts?)
  • Store the last updated time for a package record
  • Make sure to log the source of the package (elpa, nongnu-elpa, melpa, melpa-stable)
  • Deduplicate package information if they share the same name?
  • Sort package listing alphabetically? (query parameter?)
  • Need a way to represent package dependencies across package sources but tie them together at the higher level of packages
  • Consider changing ID strategy for packages to not use an auto-incremented, numeric ID
Subscribe to the System Crafters Newsletter!
Stay up to date with the latest System Crafters news and updates! Read the Newsletter page for more information.
Name (optional)
Email Address