diff options
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") }} — + {% 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") }} — + {% 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 %} |
