summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Geyer <philipp@geyer.co.uk>2022-01-22 14:12:35 +0000
committerPhilipp Geyer <philipp@geyer.co.uk>2022-01-22 14:12:35 +0000
commitba4e78346aac1843890c1a889807b8e60bdf9419 (patch)
tree5982ccc113872b20db69005bf8bb2addff492571
parent93ea64f62c8056a532367600f53f69d4daa79ea3 (diff)
Some work on my website - should be looking half decent finally, and have some content
-rw-r--r--.gitignore10
-rw-r--r--Makefile3
-rw-r--r--cv/backbreaker.org2
-rw-r--r--cv/boz.org29
-rw-r--r--cv/cars.org2
-rw-r--r--cv/codg.org2
-rw-r--r--cv/codo.org2
-rw-r--r--cv/doodle.org2
-rw-r--r--cv/freeblade.org2
-rw-r--r--cv/ghl.org22
-rw-r--r--cv/ghl_companion.org2
-rw-r--r--cv/hotwheels.org2
-rw-r--r--cv/index.org64
-rw-r--r--cv/juice.org2
-rw-r--r--cv/jumanji.org2
-rw-r--r--cv/lara.org24
-rw-r--r--cv/mickey.org2
-rw-r--r--cv/shark.org2
-rw-r--r--cv/toybox.org2
-rw-r--r--cv/transformers.org2
-rw-r--r--cv/vikings.org48
-rw-r--r--cv/wipeout.org2
-rw-r--r--main.org3
-rw-r--r--pages/about.org20
-rw-r--r--pages/contact.org4
-rw-r--r--pages/cv.org29
-rw-r--r--pages/intro.org14
-rw-r--r--pages/site-credits.org38
-rw-r--r--posts/01-firstpost.org74
-rw-r--r--publish.el83
-rw-r--r--theme/templates/articles.html18
-rw-r--r--theme/templates/base.html55
-rw-r--r--theme/templates/blog.html18
-rw-r--r--theme/templates/feed.xml44
-rw-r--r--theme/templates/page.html12
-rw-r--r--theme/templates/post.html33
36 files changed, 672 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f7162c5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+# technically this is a symlink to a different user on the live machine, so
+# it doesn't need the folder one, but keep it to be save
+output/
+output
+
+# similarly, this is also a symlink, but for another reason. If I copy the static
+# data directly into the output, all links to it will be annoyingly prefixed with output/
+# so instead copy to the root of the project, which is symlinked into the output dir
+static/
+static \ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..37c9094
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,3 @@
+.phony: site
+site:
+ emacs --script publish.el
diff --git a/cv/backbreaker.org b/cv/backbreaker.org
new file mode 100644
index 0000000..63e262f
--- /dev/null
+++ b/cv/backbreaker.org
@@ -0,0 +1,2 @@
+#+TITLE: Backbreaker 2: Vengeance
+#+SLUG: 04
diff --git a/cv/boz.org b/cv/boz.org
new file mode 100644
index 0000000..b4e064a
--- /dev/null
+++ b/cv/boz.org
@@ -0,0 +1,29 @@
+#+TITLE: Call of Duty: Black Ops Zombies
+#+SLUG: 03
+
+[[url_for_img:static,file=images/cv/pexels-photo-5435454.jpeg][Photo by cottonbro from Pexels]]
+
+As with the earlier game I worked on, [[url_for:cv,slug=01][Lara Croft and the Guardian of
+Light]], we were working to recreate a console and PC title on
+mobile. The studio had previously already worked on Call of Duty:
+World at War Zombies, so we begun with that project as a start.
+
+Given the amount of UI that I had done on previous projects, I
+requested to work on other things as well. As such, I had a bit more
+experience on this game, working with all the different systems. This
+included writing a lot more set piece scenarios, as well as
+implementing fast lookup systems for interactables on the large maps.
+
+Regarding UI, one of the reasons that I managed to do so little,
+despite being the developer with the most UI implementation
+experience, and having the closest working relationship with the UI
+artists, was that I had discovered a project called [[http://tulrich.com/textweb.pl?path=geekstuff/gameswf.txt][gameswf]]. I spent
+two weeks integrating it with our in house rendering and asset
+management systems, and then provided support throughout the rest of
+the project for actionscript bugs, as well as optimising the rendering
+by, for example, replacing the internal font rendering with hooks into
+our own optimised bitmap font rendering systems. Overall, this allowed
+the artists far more flexibility to create dynamic menu systems, and
+allowed me to work on other game features.
+
+[[url_for_img:static,file=images/cv/pexels-photo-9818998.jpeg][Photo by Mario Wallner from Pexels]]
diff --git a/cv/cars.org b/cv/cars.org
new file mode 100644
index 0000000..9d04a51
--- /dev/null
+++ b/cv/cars.org
@@ -0,0 +1,2 @@
+#+TITLE: Disney Cars and Disney Planes
+#+SLUG: 08
diff --git a/cv/codg.org b/cv/codg.org
new file mode 100644
index 0000000..f60d64d
--- /dev/null
+++ b/cv/codg.org
@@ -0,0 +1,2 @@
+#+TITLE: Call of Duty: Ghosts
+#+SLUG: 12
diff --git a/cv/codo.org b/cv/codo.org
new file mode 100644
index 0000000..a6c1c7c
--- /dev/null
+++ b/cv/codo.org
@@ -0,0 +1,2 @@
+#+TITLE: Call of Duty Online
+#+SLUG: 11
diff --git a/cv/doodle.org b/cv/doodle.org
new file mode 100644
index 0000000..1716a76
--- /dev/null
+++ b/cv/doodle.org
@@ -0,0 +1,2 @@
+#+TITLE: Doodle Jump: Space Chase
+#+SLUG: 16
diff --git a/cv/freeblade.org b/cv/freeblade.org
new file mode 100644
index 0000000..99a1d95
--- /dev/null
+++ b/cv/freeblade.org
@@ -0,0 +1,2 @@
+#+TITLE: Freeblade
+#+SLUG: 15
diff --git a/cv/ghl.org b/cv/ghl.org
new file mode 100644
index 0000000..744bbef
--- /dev/null
+++ b/cv/ghl.org
@@ -0,0 +1,22 @@
+#+TITLE: Guitar Hero: Live
+#+SLUG: 09
+
+[[url_for_img:static,file=images/cv/pexels-photo-165971.jpeg][Photo by Méline Waxx from Pexels]]
+
+I joined this project in the gameplay team, and I ended up working on
+a number of systems, including UI and input. This was a really fun
+project, as it was a game series that I grew up loving, and Guitar
+Hero: Live added some really cool new features.
+
+Among other things, this was also my first attempt to use console dev
+hardware, and I was set up to develop and test on PS3, Xbox 360, Wii-U
+and iOS. I did the majority of my console development at the time on
+the PS3 though.
+
+The development time on the game was sometimes not the easiest, with
+ubiquitous crunch rearing its head, as well as a plethora of bugs,
+which were complicated by the multiple platforms, online capabilities,
+and peripherals, but I feel I learned a lot from the experience, and
+really enjoyed it.
+
+[[url_for_img:static,file=images/cv/pexels-photo-7886380.jpeg][Photo by Mikhail Nilov from Pexels]]
diff --git a/cv/ghl_companion.org b/cv/ghl_companion.org
new file mode 100644
index 0000000..34ee465
--- /dev/null
+++ b/cv/ghl_companion.org
@@ -0,0 +1,2 @@
+#+TITLE: Guitar Hero: Live - Companion App
+#+SLUG: 10
diff --git a/cv/hotwheels.org b/cv/hotwheels.org
new file mode 100644
index 0000000..5b2b0ee
--- /dev/null
+++ b/cv/hotwheels.org
@@ -0,0 +1,2 @@
+#+TITLE: HotWheels Ultimate Garage
+#+SLUG: 19
diff --git a/cv/index.org b/cv/index.org
new file mode 100644
index 0000000..7c87746
--- /dev/null
+++ b/cv/index.org
@@ -0,0 +1,64 @@
+#+TITLE: Experience
+#+SLUG: 00
+#+OPTIONS: toc:nil
+
+My CV has a list of my previous experiences on it, but given the
+limited space, only very little can be said about them. So I decided
+that I needed to showcase the work I did on them here.
+
+* Ideaworks Game Studio / Marmalade Game Studio
+My first job out of university. I started in 2010 as a Junior
+Programmer, and left in 2013.
+- [[url_for:cv,slug=01][Lara Croft and the Guardian of Light (iOS)]] *
+- [[url_for:cv,slug=02][Transformers 3: Dark of the Moon (iOS)]]
+- [[url_for:cv,slug=03][Call of Duty: Black Ops Zombies (iOS)]] *
+- [[url_for:cv,slug=04][Backbreaker 2: Vengeance]]
+- [[url_for:cv,slug=05][Wipeout (iOS)]]
+- [[url_for:cv,slug=06][Marmalade Juice]]
+
+* AppToyz
+I did a little contract work, working on a few Disney licensed titles,
+for a few months in 2013
+- [[url_for:cv,slug=07][Disney Mickey & Minnie Applingz]]
+- [[url_for:cv,slug=08][Disney Cars and Disney Planes]]
+
+* FreeStyle Games
+My first job after moving to 'Silicon Spa' in 2013 until 2016.
+- [[url_for:cv,slug=09][Guitar Hero: Live]] *
+- [[url_for:cv,slug=10][Guitar Hero: Live - Companion App]]
+- [[url_for:cv,slug=11][Call of Duty Online]]
+- [[url_for:cv,slug=12][Call of Duty: Ghosts]]
+
+* Viewpoint Games
+After leaving FreeStyle in 2016, I joined a VR studio, started by
+former colleagues until 2017.
+- [[url_for:cv,slug=13][Hungry Shark VR]]
+- [[url_for:cv,slug=14][Ghosts in the Toybox]]
+
+* Pixel Toys
+I spent a few months in 2017 helping out with some development at
+Pixel Toys.
+- [[url_for:cv,slug=15][Freeblade]]
+
+* Hugo Games / 5th Planet Games
+After leaving Pixel Toys, I joined a Nottingham based studio as a lead
+programmer, to open a satellite studio in Leamington Spa from 2018 to 2019.
+- [[url_for:cv,slug=16][Doodle Jump: Space Chase]]
+- [[url_for:cv,slug=17][Vikings]] *
+
+* Funsolve
+In 2019, I joined a Rugby based studio to take over the lead
+programmer role.
+- [[url_for:cv,slug=18][Jumanji: The Video Game]]
+- [[url_for:cv,slug=19][Hotwheels Ultimate Garage]]
+
+* CUEi
+Just before the pandemic hit in 2020, I joined Coventry University
+Enterprises, to work on 'non-game games', using games technologies for
+enterprise.
+- On Demand rendering
+- Layered rendering
+- VR training simulation
+- Distributed photorealistic rendering
+
+[[url_for_img:static,file=images/cv/pexels-photo-4978057.jpeg][Photo by Caleb Oquendo from Pexels]]
diff --git a/cv/juice.org b/cv/juice.org
new file mode 100644
index 0000000..a932f1c
--- /dev/null
+++ b/cv/juice.org
@@ -0,0 +1,2 @@
+#+TITLE: Marmalade Juice
+#+SLUG: 06
diff --git a/cv/jumanji.org b/cv/jumanji.org
new file mode 100644
index 0000000..377536f
--- /dev/null
+++ b/cv/jumanji.org
@@ -0,0 +1,2 @@
+#+TITLE: Jumanji: The Video Game
+#+SLUG: 18
diff --git a/cv/lara.org b/cv/lara.org
new file mode 100644
index 0000000..1b6a84a
--- /dev/null
+++ b/cv/lara.org
@@ -0,0 +1,24 @@
+#+TITLE: Lara Croft and the Guardian of Light
+#+SLUG: 01
+
+[[url_for_img:static,file=images/cv/pexels-photo-257092.jpeg][Photo by Pixabay]]
+
+Lara Croft and the Guardian of Light was a 3rd person action adventure
+game originally made for PC and console. My first project while at
+Ideaworks Game Studio, was to work on a recreation of this game for
+mobile platforms.
+
+The game was written with in house tech, in C++. We had access to
+console game assets, but we created mobile optimised assets for use in
+the game.
+
+My work in the game involved implementing game systems for setpiece
+objects, multiplayer programming, and setting up an extensible UI system.
+
+We were using an in house UI solution, which used a C-style layout
+language. One of my main jobs was to work with this system, making
+custom widgets, as well as a library of reusable components with which
+we could quickly develop the UI, and share resources between
+locations.
+
+[[url_for_img:static,file=images/cv/pexels-photo-10761867.jpeg][Photo by Ted Webb from Pexels]]
diff --git a/cv/mickey.org b/cv/mickey.org
new file mode 100644
index 0000000..1d03229
--- /dev/null
+++ b/cv/mickey.org
@@ -0,0 +1,2 @@
+#+TITLE: Disney Applingz
+#+SLUG: 07
diff --git a/cv/shark.org b/cv/shark.org
new file mode 100644
index 0000000..c16c23b
--- /dev/null
+++ b/cv/shark.org
@@ -0,0 +1,2 @@
+#+TITLE: Hungry Shark VR
+#+SLUG: 13
diff --git a/cv/toybox.org b/cv/toybox.org
new file mode 100644
index 0000000..840e740
--- /dev/null
+++ b/cv/toybox.org
@@ -0,0 +1,2 @@
+#+TITLE: Ghosts in the Toybox
+#+SLUG: 14
diff --git a/cv/transformers.org b/cv/transformers.org
new file mode 100644
index 0000000..ca89595
--- /dev/null
+++ b/cv/transformers.org
@@ -0,0 +1,2 @@
+#+TITLE: Transformers 3: Dark of the Moon
+#+SLUG: 02
diff --git a/cv/vikings.org b/cv/vikings.org
new file mode 100644
index 0000000..4a5c61f
--- /dev/null
+++ b/cv/vikings.org
@@ -0,0 +1,48 @@
+#+TITLE: Vikings
+#+SLUG: 17
+
+[[url_for_img:static,file=images/cv/pexels-photo-5023698.jpeg][Photo by Erik Mclean from Pexels]]
+
+This was a project that interested me greatly. It was a tie in with
+the Netflix series of the same name. Unfortunately I inherited a
+project that had come from a previous design iteration, so while we
+had some work to begin with, a large amount of it had to be restarted.
+
+The best way that I could describe the game is, a multiplayer,
+turnbased battle system, similar to, for example, Final Fantasy VII,
+with team building and character collecting.
+
+The team we started off with was just me, a designer, and the artists
+that had been on the project since the beginning. My first task was to
+identify what we needed to get the project completed. I hired
+programmers for the main game development, but then also found a
+contract company to provide backend and network development
+support. With the guidance of the backend expert, I designed an
+architecture that would allow us to develop the game in a staged way,
+so that it should not require major rewrites to add features or change
+technologies when we scaled up.
+
+As we were already playing catchup on this project, which had been
+running for some time before we got a hold of it, my primary goal was
+to get an actual multiplayer game running as soon as possible, so,
+while the art assets that had already been created were used, little
+additional final UI was created or implemented.
+
+The next most important thing that was done on this project was for me
+to work with the artists to attempt to formalise an art pipeline,
+especially for animation, so that we had a reliable way to get high
+quality animations importing correctly.
+
+The final thing that I did was migrate the project from an aging
+Subversion system running in house to a cloud based git project. This
+was primarily because we were working across multiple studios and I
+felt this was the most reliable way to be able to run the project
+smoothly. I provided training and support for those unfamiliar with
+distributed version control, and git.
+
+Unfortunately this project did not get much further than just getting
+the re-envisioned proof of concept done, as the TV series got
+cancelled, causing the company to close the satellite studio that I
+was a part of.
+
+[[url_for_img:static,file=images/cv/pexels-photo-6739035.jpeg][Photo by Dagmara Dombrovska from Pexels]]
diff --git a/cv/wipeout.org b/cv/wipeout.org
new file mode 100644
index 0000000..206cbfe
--- /dev/null
+++ b/cv/wipeout.org
@@ -0,0 +1,2 @@
+#+TITLE: Wipeout
+#+SLUG: 05
diff --git a/main.org b/main.org
deleted file mode 100644
index 9855cbe..0000000
--- a/main.org
+++ /dev/null
@@ -1,3 +0,0 @@
-* Test page
- This is awesome no?
- Maybe. We'll see if it actually works
diff --git a/pages/about.org b/pages/about.org
new file mode 100644
index 0000000..2e3a82f
--- /dev/null
+++ b/pages/about.org
@@ -0,0 +1,20 @@
+#+TITLE: About
+* Who are you?
+ Philipp Geyer
+
+* No, Who are you? More information please.
+ I am programmer, coder, software engineer, developer, whatever you
+ want to call me. I have spent a decade in video game development,
+ and recently have been working on enterprise software.
+
+* What is the point of this website?
+ In part to contain information I'd like to put about myself, which
+ won't fit on my CV, in part to just have a place to ramble about
+ stuff. Some of it might be insightful, if I'm lucky.
+
+* Your CV? Where can I find that?
+ [[https://github.com/nistur/cv/releases][On my github]]
+
+* Why are there so many files?
+ To be honest, just download the [[https://github.com/nistur/cv/releases][latest]] PDF. If you're interested in
+ the other stuff, read [[file:cv.org][this]] writeup.
diff --git a/pages/contact.org b/pages/contact.org
new file mode 100644
index 0000000..6ba3bea
--- /dev/null
+++ b/pages/contact.org
@@ -0,0 +1,4 @@
+#+TITLE: Contact Me
+#+SLUG: contact
+
+Coming soon
diff --git a/pages/cv.org b/pages/cv.org
new file mode 100644
index 0000000..a3bdfc7
--- /dev/null
+++ b/pages/cv.org
@@ -0,0 +1,29 @@
+#+TITLE: CV
+
+So, where did this all begin? I used to have my CV as an
+OpenOffice.org document. Every time I needed to update it, I fought
+with formatting, and ended up rewriting it. I didn't enjoy it. I
+just wanted to have my CV content separate and not have to worry
+about the formatting. Of course there is always formatting to worry
+about, but if I could abstract that away and deal with it later,
+that would make me happy.
+
+So the obvious thing to me was to use emacs [[https://orgmode.org/][org-mode]]. I previously
+used org-mode to write my dissertation, so had some experience using
+it for writing documents. I found a LaTeX stylesheet which I
+modified (albeit only slightly) and this allowed me to create a
+nicely styled PDF by just writing content into the source file.
+
+At some point, I thought it would be a good idea to make an
+executable where the command line flags would output the content of
+my CV. This then needed to embed the original data into it, so I had
+to carve out the data from the org-mode file and embed it into the
+source for the executable.
+
+At this point, I had several languages in play for the project, so I
+thought it'd be fun to see how many different languages I could
+use. So I wrote another script to convert my CV to a
+man-page... because why not.
+
+I have some other things planned for other languages and outputs,
+but that's all for now.
diff --git a/pages/intro.org b/pages/intro.org
new file mode 100644
index 0000000..d4df9dc
--- /dev/null
+++ b/pages/intro.org
@@ -0,0 +1,14 @@
+#+TITLE: Intro
+Hello internet travelers, citizens and natives.
+
+Nice to meet you, I'm Philipp Geyer. I am a programmer and this is my
+site. It will have information about my various projects and
+history. I've worked on a bunch that I find very interesting, and
+think it's worth documenting. I also have a few personal projects that
+I think should have something written.
+
+I usually code in high level C++ and C# professionally, and in my
+personal projects, I often use low level C, but also enjoy jumping
+around languages. I have projects in lisp, assembly, C, lua and
+bash. I also enjoy experimenting with other languages, so have many
+more not shared just for the sake of experimenting with the languages.
diff --git a/pages/site-credits.org b/pages/site-credits.org
new file mode 100644
index 0000000..6b4c495
--- /dev/null
+++ b/pages/site-credits.org
@@ -0,0 +1,38 @@
+#+TITLE: Website Credits
+#+SLUG: credits
+
+I am neither a web developer, nor am I an artist. This website
+couldn't have been made without open source and creative commons
+software and assets. Below I've listed everything that I haven't
+created, or had created specifically for me, along with the license
+for it.
+
+- Web server - [[https://picolisp.com/wiki/?home][Picolisp]] - [[https://opensource.org/licenses/MIT][MIT]]
+- Static site generator - [[https://emacs.love/weblorg][Weblorg]] - [[https://www.gnu.org/licenses/gpl-3.0.en.html][GPL]]
+- Footer image - [[https://ansimuz.itch.io/country-side-platfformer-][Country Side Platfformer]] - [[https://creativecommons.org/share-your-work/public-domain/cc0/][CC0]]
+
+[[url_for:cv,slug=00][CV]]
+- [[https://www.pexels.com/photo/portable-game-console-on-table-4978057/][Portable game console on table]] - [[https://www.pexels.com/@caleboquendo][Caleb Oquendo]] - [[https://www.pexels.com/license/][Pexels]]
+
+[[url_for:cv,slug=01][Lara Croft and the Guardian of Light]]
+- [[https://www.pexels.com/photo/silhouette-of-trees-at-sunset-257092/][Silhouette of Trees at Sunset]] - [[https://www.pexels.com/@pixabay][Pixabay]] - [[https://creativecommons.org/share-your-work/public-domain/cc0/][CC0]]
+- [[https://www.pexels.com/photo/sky-landmark-blue-summer-10761867/][Gray Concrete Building Under Blue Sky]] - [[https://www.pexels.com/@ted-webb-115813652][Ted Webb]] - [[https://www.pexels.com/license/][Pexels]]
+
+[[url_for:cv,slug=03][Call of Duty: Black Ops Zombies]]
+- [[https://www.pexels.com/photo/zombie-attack-5435454/][Zombie Attack]] - [[https://www.pexels.com/@cottonbro][cottonbro]] - [[https://www.pexels.com/license/][Pexels]]
+- [[https://www.pexels.com/photo/black-and-white-streets-man-love-9818998/][Grayscale Photo of Persons Feet on White Textile]] - [[https://www.pexels.com/@mario-wallner-107470762][Mario Wallner]] - [[https://www.pexels.com/license/][Pexels]]
+
+[[url_for:cv,slug=09][Guitar Hero: Live]]
+- [[https://www.pexels.com/photo/red-electric-guitar-165971/][Red Electric Guitar]] - [[https://www.pexels.com/@meline-waxx-44315][Meline Waxx]] - [[https://www.pexels.com/terms-of-service/][Pexels]]
+- [[https://www.pexels.com/photo/person-playing-a-blue-guitar-hero-live-7886380/][Person Playing a Blue Guitar Hero Live]] - [[https://www.pexels.com/@mikhail-nilov][Mikhail Nilov]] - [[https://www.pexels.com/terms-of-service/][Pexels]]
+
+[[url_for:cv,slug=17][Vikings]]
+- [[https://www.pexels.com/photo/vintage-round-viking-shields-in-wooden-house-5023698/][Vintage round Viking shields in wooden house]] - [[https://www.pexels.com/@introspectivedsgn][Erik Mclean]] - [[https://www.pexels.com/terms-of-service/][Pexels]]
+- [[https://www.pexels.com/photo/wooden-runes-and-stones-scattered-on-wool-plaid-6739035/][Wooden runes and stones scattered on wool plaid]] - [[https://www.pexels.com/@dagmara-dombrovska-22732579][Dagmara Dombrovska]] - [[https://www.pexels.com/license/][Pexels]]
+
+[[url_for:pages,slug=credits][Credits]]
+- [[https://www.pexels.com/photo/wood-connection-technology-blur-4099971/][Black Sony Ps 4 Game Controller]] - [[https://www.pexels.com/@fotogratuite][Christian Naccarato]] - [[https://www.pexels.com/terms-of-service/][Pexels]]
+
+[[url_for_img:static,file=images/cv/pexels-photo-4099971.jpeg][Photo by Christian Naccarato from Pexels]]
+
+
diff --git a/posts/01-firstpost.org b/posts/01-firstpost.org
new file mode 100644
index 0000000..f6b3c13
--- /dev/null
+++ b/posts/01-firstpost.org
@@ -0,0 +1,74 @@
+#+TITLE: A New Start
+
+#+BEGIN_EXAMPLE
+All we have to decide is what to do with the time that is given us. - JRR Tolkien
+#+END_EXAMPLE
+
+I used to have an old site, which I hosted at http://nistur.com. I had
+an ancient version of Wordpress which I pretty much abandoned. I kept
+the page around because I had my CV linking to various parts of it. I
+wanted to keep the domain name, because it was a handle I had used
+since I was a teenager, but the site itself didn't bother me. When the
+site just totally gave up, I had to decide what to do. Either I could
+try to put it onto life support for the purpose of just expanding on
+the information in my [[file:pages/cv.org][CV]] or, I could create something new.
+
+I did procrastinate, trying to decide what was best to spend my time
+working on. I could install a brand new version of Wordpress on a
+site, I could write something from scratch, I could run a Wix site, I
+could use one of a million different solutions.
+
+I am not a web developer. I have done a small amount of web
+development, enough to know that while I can write some backend tech
+for services I need in my projects, I do not want to be writing
+sites. So this ruled out my normal goto, write it from scratch. Using
+something like Wix wasn't "on brand" with my CV though, which is
+esoteric and awkward, solving a problem in an interesting way.
+
+I also didn't know where I wanted to host it. I had been using a big
+CPanel based host system for the past 10+ years, but I think I'm
+probably overpaying, and I definitely don't feel comfortable in that
+system, it's both too complicated for what I actually use, but at the
+same time feels too simplified for me to get stuck in and use it.
+
+Then I had an idea. I could, temporarily at least, host a page on
+AWS. Their t2.micro instances are free for 12 months. At the end of
+that time, I could decide what to do. If I was using such a minimal
+instance, I probably didn't want a big web server, database system
+etc. I don't need those. I have a small website with only pretty
+minimal data on it. I could create a static site, and host it using
+[[https://picolisp.com][Picolisp]] as a web server. This would allow me a pretty slimline system
+that I could expand to do more dynamic content if I wanted to in
+future, but also the static site would mean that if I changed where I
+wanted to host it in future, I would just copy the data files onto the
+new host. Simple.
+
+What static site generator then? Most people would probably go for
+something that uses Markdown, and I did seriously consider that. The
+solutions are very good, and very well supported. I, however, had been
+using Emacs [[https://orgmode.org][Org-Mode]] for almost 15 years for many things, including
+authoring documents. So I found [[https://emacs.love/weblorg][Weblorg]] which seemed to tick all my
+boxes. /I could have just used org-html-export-to-html but I wanted
+something a bit slicker really./
+
+So, there we have my current setup, I have a repository, which I will
+shortly push to github, once I have a few more pages fleshed out, and
+maybe some minor customisation done on the site, it exports with
+Weblorg, and gets hosted on AWS with a picolisp webserver. Could I
+have had a site up and running much quicker than this? Of course. I
+chose this path though, because it was /relatively/ quick, compared to
+trying to write myself a site from scratch, but at the same time,
+maintains some of the interest that keeps me invested in projects. I
+feel, for me, this is a better solution than an easier one.
+
+I also decided to not use nistur.com as a domain for my CV related
+stuff. Instead I'm going to be keeping my 'professional' things on
+here, [[http://philippgeyer.co.uk][PhilippGeyer.co.uk]]. I will at some point also revive nistur.com
+and use that for less related personal projects. I am not trying to
+distance myself from that by switching domains, but rather just trying
+to keep things a bit more organised. I also won't make this
+particularly tight laced. As should be obvious by this post, I find
+more informal writing a lot easier, so I'll keep this laid back
+approach.
+
+That's probably it for now.
diff --git a/publish.el b/publish.el
new file mode 100644
index 0000000..e0741da
--- /dev/null
+++ b/publish.el
@@ -0,0 +1,83 @@
+(require 'package)
+(package-initialize)
+
+(require 'weblorg)
+
+(weblorg-site
+ :name "Philipp Geyer"
+ :base-url "https://philippgeyer.co.uk"
+ :theme nil
+ :author "Philipp Geyer")
+
+;; landing page
+(weblorg-route
+ :name "index"
+ :input-pattern "pages/intro.org"
+ :template "page.html"
+ :output "output/index.html"
+ :url "/"
+ :site (weblorg-site
+ :base-url "https://philippgeyer.co.uk"))
+
+;; route for rendering each post
+(weblorg-route
+ :name "posts"
+ :input-pattern "posts/*.org"
+ :template "post.html"
+ :output "output/posts/{{ slug }}.html"
+ :url "/posts/{{ slug }}.html"
+ :site (weblorg-site
+ :base-url "https://philippgeyer.co.uk"))
+
+;; route for rendering the index page of the blog
+(weblorg-route
+ :name "blog"
+ :input-pattern "posts/*.org"
+ :input-aggregate #'weblorg-input-aggregate-all-desc
+ :template "blog.html"
+ :output "output/blog.html"
+ :url "/blog.html"
+ :site (weblorg-site
+ :base-url "https://philippgeyer.co.uk"))
+
+;; route for rendering each page
+(weblorg-route
+ :name "pages"
+ :input-pattern "pages/*.org"
+ :template "page.html"
+ :output "output/{{ slug }}.html"
+ :url "/{{ slug }}.html"
+ :site (weblorg-site
+ :base-url "https://philippgeyer.co.uk"))
+
+;; route for rendering the index page of articles
+(weblorg-route
+ :name "articles"
+ :input-pattern "pages/*.org"
+ :input-aggregate #'weblorg-input-aggregate-all-desc
+ :template "articles.html"
+ :output "output/articles.html"
+ :url "/articles.html"
+ :site (weblorg-site
+ :base-url "https://philippgeyer.co.uk"))
+ :input-aggregate #'weblorg-input-aggregate-all-desc
+
+(weblorg-route
+ :name "cv"
+ :input-pattern "cv/*.org"
+ :template "page.html"
+ :output "output/cv/{{ slug }}.html"
+ :url "/cv/{{slug }}.html"
+ :site (weblorg-site
+ :base-url "https://philippgeyer.co.uk"))
+
+;; route for static assets that also copies files to output directory
+(weblorg-copy-static
+ :output "static/{{ file }}"
+ :url "/static/{{ file }}"
+ :site (weblorg-site
+ :base-url "https://philippgeyer.co.uk"))
+
+(setq debug-on-error t)
+
+(weblorg-export)
diff --git a/theme/templates/articles.html b/theme/templates/articles.html
new file mode 100644
index 0000000..07085a1
--- /dev/null
+++ b/theme/templates/articles.html
@@ -0,0 +1,18 @@
+{% extends "base.html" %}
+
+{% block main %}
+ <h1>Articles</h1>
+
+ <ul class="posts">
+ {% for post in posts %}
+ <li class="post-title">
+ <a href="{{ url_for("pages", slug=post.slug) }}">
+ {% if post.date is defined %}
+ {{ post.date|strftime("%b %d, %Y") }} &mdash;
+ {% endif %}
+ {{ post.title }}
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+{% endblock %}
diff --git a/theme/templates/base.html b/theme/templates/base.html
new file mode 100644
index 0000000..ff31f26
--- /dev/null
+++ b/theme/templates/base.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<html lang="en-us">
+ <head>
+ {% block head %}
+ <meta charset="utf-8">
+ <title>
+ {% block title %}{{ site_name | default("Philipp Geyer") }}{% endblock %}
+ {% block subtitle %}{% endblock %}
+ </title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ {% if site_owner is defined %}<meta name="author" content="{{ site_owner }}" />{% endif %}
+ {% if site_description is defined %}<meta name="description" content="{{ site_description }}" />{% endif %}
+ {% if site_keywords is defined %}<meta name="keywords" content="{{ site_keywords }}" />{% endif %}
+ {% block meta %}{% endblock %}
+ <link rel="stylesheet" href="{{ url_for("static", file="style.css") }}" type="text/css" />
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Lora&family=Space+Mono&display=swap" />
+ {% endblock %}
+ </head>
+ <body>
+ {# Top navigation bar #}
+ {% block nav %}
+ <header>
+ <h1>
+ <a href="{{ url_for("index") }}">
+ {% block title %}{{ site_name | default("Philipp Geyer") }}{% endblock %}
+ </a>
+ </h1>
+ <a href="#main" class="visually-hidden">jump to main content</a>
+ <nav>
+ <ul class="menu">
+ <li><a href="{{ url_for("blog") }}">posts</a></li>
+ <li><a href="{{ url_for("articles") }}">pages</a></li>
+ </ul>
+ </nav>
+ </header>
+ {% endblock %}
+
+ {# Probably where most of the action will happen #}
+ <main id="main">
+ {% block main %}{% endblock %}
+ </main>
+
+ {# Links, copyright notice, etc #}
+ {% block footer %}
+ <footer>
+ <ul class="menu">
+ <li><a href="{{ url_for("pages", slug="about") }}">about</a></li>
+ <li><a href="{{ url_for("pages", slug="contact") }}">contact</a></li>
+ <li><a href="{{ url_for("pages", slug="credits") }}">credits</a></li>
+ </ul>
+ </footer>
+ {% endblock %}
+
+ </body>
+</html>
diff --git a/theme/templates/blog.html b/theme/templates/blog.html
new file mode 100644
index 0000000..e3e8c3e
--- /dev/null
+++ b/theme/templates/blog.html
@@ -0,0 +1,18 @@
+{% extends "base.html" %}
+
+{% block main %}
+ <h1>Blog Posts</h1>
+
+ <ul class="posts">
+ {% for post in posts %}
+ <li class="post-title">
+ <a href="{{ url_for("posts", slug=post.slug) }}">
+ {% if post.date is defined %}
+ {{ post.date|strftime("%b %d, %Y") }} &mdash;
+ {% endif %}
+ {{ post.title }}
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+{% endblock %}
diff --git a/theme/templates/feed.xml b/theme/templates/feed.xml
new file mode 100644
index 0000000..5cf001c
--- /dev/null
+++ b/theme/templates/feed.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<rss version="2.0"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+ xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+ xmlns:georss="http://www.georss.org/georss"
+ xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
+ xmlns:media="http://search.yahoo.com/mrss/">
+ <channel>
+ <title>Simple Blog</title>
+ <atom:link
+ href="{{ url_for("feed") }}"
+ rel="self" type="application/rss+xml" />
+ <link>{{ url_for("index") }}</link>
+ <description><![CDATA[]]></description>
+ <language>en</language>
+ <pubDate>{{ posts | first | getattr("date") | strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
+ <lastBuildDate>{{ now() | strftime("%a, %d %b %Y %H:%M:%S %z") }}</lastBuildDate>
+ <generator>{{ meta.generator }}</generator>
+ <webMaster>web@master (Blog Author)</webMaster>
+ <image>
+ <url>{{ url_for("index") }}media/img/8bitme.png</url>
+ <title>Blog Author</title>
+ <link>{{ url_for("index") }}</link>
+ </image>
+
+ {% for post in posts %}
+ <item>
+ <title>{{ post.title }}</title>
+ <link>{{ url_for("posts", slug=post.slug) }}</link>
+ <author>{{ post.author|default("author@mail.com (Blog Author)") }}</author>
+ <guid isPermaLink="false">{{ url_for("posts", slug=post.slug) }}</guid>
+ {% if post.date is defined %}
+ <pubDate>{{ post.date|strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
+ {% endif %}
+ <description><![CDATA[{{ post.html|safe }}]]></description>
+ </item>
+ {% endfor %}
+
+ </channel>
+</rss>
diff --git a/theme/templates/page.html b/theme/templates/page.html
new file mode 100644
index 0000000..daa7a36
--- /dev/null
+++ b/theme/templates/page.html
@@ -0,0 +1,12 @@
+{% extends "base.html" %}
+
+{% block main %}
+ <article class="page">
+ <h1 class="page__title">
+ {{ post.title }}
+ </h1>
+ <section>
+ {{ post.html|safe }}
+ </section>
+ </article>
+{% endblock %}
diff --git a/theme/templates/post.html b/theme/templates/post.html
new file mode 100644
index 0000000..7bded9a
--- /dev/null
+++ b/theme/templates/post.html
@@ -0,0 +1,33 @@
+{% extends "base.html" %}
+
+{% block meta %}
+ <meta property="og:title" content="{{ post.title }}">
+ <meta property="og:url" content="{{ post.url }}">
+ {% if post.description is defined %}
+ <meta property="og:description" content="{{ post.description }}">
+ {% elif project_description is defined %}
+ <meta property="og:description" content="{{ project_description }}">
+ {% endif %}
+ {% if post.image is defined %}
+ <meta property="og:image" content="{{ post.image }}">
+ {% elif project_image is defined %}
+ <meta property="og:image" content="{{ project_image }}">
+ {% endif %}
+ <meta name="twitter:card" content="summary_large_image">
+{% endblock %}
+
+{% block main %}
+ <article class="post">
+ <h1 class="post__title">
+ {{ post.title }}
+ </h1>
+ <section class="post__meta">
+ {% if post.date is defined %}
+ {{ post.date|strftime("%b %d, %Y") }}
+ {% endif %}
+ </section>
+ <section>
+ {{ post.html|safe }}
+ </section>
+ </article>
+{% endblock %}