Det började med att jag kände ett sug efter att blogga igen, jag tror någon gång i höstas. Dock fanns det en hel hop problem som hindrade mig, framför allt att:
- Den installerade wordpress-instansen var gammal och jag iddes inte sätta igång med att uppgradera den
- Det irriterade mig att allt jag skriver (som till 95% är för mig själv) ligger undanstoppat i en databas i ett format jag inte nödvändigtvis i framtiden kommer kunna hantera.
Så byta ut Wordpress med andra ord.
Första försöket
Eftersom mina poster är till 99% ren text med lite länkar inskjutna så är Markdown ett bra val. Det är ett format som är lättläst och lätthanterat för människor (och alltså enkelt kan sparas som det är) och konverteras till HTML. Min första tanke var att använda en extern Markdown-editor, kanske t ex StackEdit, lagra posterna där (med någon form av backup), ladda upp dem till min webbserver och sedan skriva en enkel applikation som hämtade Markdown-filerna och konverterade dem till HTML på klientsidan. Eftersom jag experimenterat lite med Blazor var detta det första jag tittade på, och jag kom ganska långt. Jag är inte helt komfortabel med moderna JS-ramverk, så detta kändes som en bra lösning.
Efter ett tag dök jag på problem - om jag ville göra något annat än bara ha en sida per post så blev det mer komplicerat. Ett arkiv eller ett tagg-bibliotek skulle antingen innebära ganska mycket kodande, onödigt mycket datahämtning till frontenden eller mycket manuellt kladd. Hela poängen var dessutom att hålla det enkelt, och inte introducera en massa logik som måste köra på servern. Så jag började titta på andra lösningar.
Förbättring
Givetvis är jag inte den första som tänkt dessa tankar, och givetvis finns det en mer eller mindre färdig lösning i JS-världen. Efter lite efterforskning beslöt jag att mer eller mindre kopiera Next Markdown Blog, och utvidga med det jag tyckte behövdes. Det innebar i och för sig att jag trots allt fick ta mig an JS, men fördelarna var helt enkelt för stora.
Teknisk lösning
All generering av HTML sker med hjälp av React, som jag även jobbar med professionellt (även om jag inte kodar i det). Alla bloggposter läggs som markdown-filer direkt i Git-repot i react-appen, och appen transformerar sedan dessa filer till HTML. Förutom detta finns logik för ett enkelt webbarkiv och ett taggbibliotek, vilket jag tycker behövs för navigation.
Ovanpå detta läggs sedan Next som hanterar själva pre-renderingen i byggsteget, och genererar statiska HTML-sidor. Detta är en annorlunda lösning än vad jag först tänkte mig, men gör också att arkivet och taggbiblioteket stöds på ett bra vis.
Eftersom Github har en tillräckligt kompetent markdown-editor så tänker jag helt enkelt skapa bloggposter direkt i repot. Jag har satt upp ett automatiskt deploy-flöde med Github Actions som vid varje push till huvudbranchen synkar filerna till webbservern via FTP upload. Detta görs med hjälp av FTP Deploy Action.
Detta innebär att när jag committar ändringar i markdown-filen i Github så skickas den direkt upp till webbservern. Detta skiljer sig inte dramatiskt mot hur det fungerar på andra publiceringsverktyg.
Migrering
Migreringen av de existerande posterna gjordes genom att exportera ut allt via exportfunktionen i Wordpress, och sedan implementera en XML-parser (i C#) som konverterar innehåll och metadata till det nya formatet. Jag använde Html2Markdown för att göra själva konverteringen av innehållet. Det fungerade förvånansvärt väl, även om jag fick göra lite manuell search & replace i Wordpress' HTML för vissa specifika fall.
Utvidgningar
En blogg ska ju egentligen ha kommentarsfält, men jag har aldrig sett det som nödvändigt för mig eftersom jag som redan nämnts främst skriver för mig själv. Kommentarer mer eller mindre kräver någon form av databaslösning, så om jag någon gång får för mig att jag vill ha detta så kommer det nog bli en extern lösning. Antagligen kommer det aldrig bli ett behov.
Framtiden
Så nu är det bara att börja blogga. Tiden får visa om detta bara var ett hobbyprojekt för sakens skull eller om jag faktiskt kommer att komma igång igen. Den som lever får se. Nothing promised, no regrets.