I've been meaning to do this project for a while, and a challenge elsenet finally got me off my butt to do it. In a nutshell: I like making fan scripts and primers of Final Fantasy games. I've kept them private for a while, but it's time to release them to the wild. Neocities to the rescue!
My first step was to build a base HTML page to serve as the main landing page. In this base HTML page, I played around with CSS a bit until I had the start of a layout.
Next step: refactor the page to split out its pieces include Jekyll includes.
You might be asking: What the heck is Jekyll? It is a static website content manager, written in Ruby (a programming language). Ruby runs on any of the three major operating systems (Windows, MacOS, and Linux) so Jekyll can run on any of those, too. I am using Jekyll locally on a Windows 11 machine.
Jekyll Home Page - has instructions for installing both Ruby and Jekyll, as well as a tutorial to build a basic site.
Jekyll is often used for smallweb blogs, and I did considering using its built-in blog templates to post my content, but I decided to build my own layout instead. I'm not the best at CSS, but I know how to do a good web search, and found tutorials for my needs.
Let's first start with refactoring the starting webpage. I had something that looked like this:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Althea Valara's Final Fantasy Recaps!</title>
<link rel="stylesheet" href="/assets/css/styles.css">
</head>
<body>
<div class="splash"><h1>Althea Valara's <em>Final Fantasy</em> Recaps!</h1></div>
<nav>
<div class="nav-box">
<ul class="navigation" style="clear:both;">
<li><a href="/">About</a></li>
<li><a href="/ffbe/">FFBE</a></li>
<li><a href="/ffxi/">FFXI</a></li>
<li><a href="/ffxiv/">FFXIV</a></li>
</ul>
</div>
</nav>
<div class="body-box">
<p>Welcome! Do you love <strong>Final Fantasy</strong> as much as I do?
Or maybe you're intrigued by the games but don't have time to play them yourself?
Here you will find recaps of some of the ongoing games in the series.
Sit back, relax, and find out why these games are so special.</p>
<div class="hero-nav">
<ul>
<li><a href="/ffbe">Final Fantasy Brave Exvius</a></li>
<li><a href="/ffxi">Final Fantasy XI</a></li>
<li><a href="/ffxiv">Final Fantasy XIV</a></li>
</ul>
</div>
</div>
<footer>
<hr width=50% align="center">
<div class="footer-box">
<ul>
<li><a href="/">About</a></li>
<li><a href="/ffbe/">FFBE</a></li>
<li><a href="/ffxi/">FFXI</a></li>
<li><a href="/ffxiv/">FFXIV</a></li>
</ul>
<p>(This site is a work in progress. Please pardon the dust.)</p>
<p><em>Written and coded by Althea Valara. Powered by Jekyll and Neocities.</em></p>
</div>
</footer>
</body>
</html>
First you need to initialize the Jekyll project:
Second, strip the repetitive pieces of the site into pieces. All pieces should reside in the _includes folder in your project directory:
header.html
<div class="splash"><h1>Althea Valara's <em>Final Fantasy</em> Recaps!</h1></div>
footer.html
<footer>
<hr width=50% align="center">
<div class="footer-box">
<ul>
<li><a href="/">About</a></li>
<li><a href="/ffbe/">FFBE</a></li>
<li><a href="/ffxi/">FFXI</a></li>
<li><a href="/ffxiv/">FFXIV</a></li>
</ul>
<p>(This site is a work in progress. Please pardon the dust.)</p>
<p><em>Written and coded by Althea Valara. Powered by Jekyll and Neocities.</br>
Multi-level menus from <a href="https://hackernoon.com/multilevel-navigation-using-jekyll-a-step-by-step-guide">this tutorial</a>.</em></p>
</div>
</footer>
The main part of the page -- the content -- then goes in index.html in the root directory of your project:
---
layout: default
title: Althea Valara's Final Fantasy Recaps!
---
<p>Welcome! Do you love <strong>Final Fantasy</strong> as much as I do?
Or maybe you're intrigued by the games but don't have time to play them yourself?
Here you will find recaps of some of the ongoing games in the series.
Sit back, relax, and find out why these games are so special.</p>
<div class="hero-nav">
<ul>
<li><a href="/ffbe">Final Fantasy Brave Exvius</a></li>
<li><a href="/ffxi">Final Fantasy XI</a></li>
<li><a href="/ffxiv">Final Fantasy XIV</a></li>
</ul>
</div>
Wait a minute... what are those four lines at the top of index.html? They are Jekyll magic called frontmatter. This front matter tells Jekyll it needs to process the file, using the default layout and with the page title listed.
Where does Jekyll get this layout from? From a file located at _layouts/default.html:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>{{ page.title }}</title>
<link rel="stylesheet" href="/assets/css/styles.css">
</head>
<body>
{% include header.html %}
{% include navigation.html %}
<div class="body-box">
{{ content }}
</div>
{% include footer.html %}
</body>
</html>
This uses a language called Liquid, mixed with HTML, that allows Jekyll to build pages. {{ page.title }} is the variable that we passed along in the frontmatter. {% include header.html %} tells Jekyll to insert the _includes/header.html file at that point in the code. Likewise for the footer.html.
You may have noticed that I also included a navigation.html - this is something that I built after the first refactor, using the following tutorial:
Multilevel Navigation Using Jekyll - shows you the three files necessary to build your navigation menus: _config.yml, _includes/navigation.html and a CSS stylesheet.
One of the beauties of Jekyll is that it can process languages other than HTML and CSS. It can also process Markdown files, and Yet Another Markup Language (YAML) files. _config.yml is the latter. Mine looks like this:
navigation:
- root: About
url: /
- root: FFBE
url: /ffbe/
first-level:
- text: Chapter 1
url: /ffbe/ffbe_1.html
second-level:
- text: Part I - Grandshelt
url: /ffbe/ffbe_1-1.html
- text: Part II - Lanzelt
url: /ffbe/ffbe_1-2.html
- text: Part III - Kolobos Island
url: /ffbe/ffbe_1-3.html
- text: Chapter II - Dirnado
url: /ffbe/ffbe_2.html
- text: Chapter III - Olderion Federation
url: /ffbe/ffbe_3.html
- text: Chapter IV - Zoldaad Empire
url: /ffbe/ffbe_4.html
- text: Chapter V - Magi Nation Mysidia
url: /ffbe/ffbe_5.html
- text: Chapter VI - Dark Continent Gronoa
url: /ffbe/ffbe_6.html
- text: Chapter VII
url: /ffbe/ffbe_7.html
second-level:
- text: Part I - Kingdom of Pharm
url: /ffbe/ffbe_7-1.html
- text: Part II - Land of the Crystals
url: /ffbe/ffbe_7-2.html
- text: Part III - Chaotic Darkness
url: /ffbe/ffbe_7-3.html
- root: FFXI
url: /ffxi/
first-level:
- text: Missions
url: /ffxi/missions.html
second-level:
- text: Bastok
url: /ffxi/bastok.html
- text: San d'Oria
url: /ffxi/sandy.html
- text: Windurst
url: /ffxi/windy.html
- text: Rise of the Zilart
url: /ffxi/rotz.html
- text: Chains of Promathia
url: /ffxi/cop.html
- text: Treasures of Aht Urhgan
url: /ffxi/toau.html
- text: Wings of the Goddess
url: /ffxi/wotg.html
- text: Seekers of Adoulin
url: /ffxi/soa.html
- text: Rhapsodies of Vana'diel
url: /ffxi/rhapsodies.html
- text: Scenarios
url: /ffxi/scenarios.html
second-level:
- text: A Crystalline Prophecy
url: /ffxi/crystalline.html
- text: A Moogle Kupo d'Etat
url: /ffxi/moogle.html
- text: A Shantotto Ascension
url: /ffxi/shantotto.html
- text: Abyssea
url: /ffxi/abyssea.html
- text: Voidwatch
url: /ffxi/voidwatch.html
- text: The Voracious Resurgence
url: /ffxi/resurgence.html
- root: FFXIV
url: /ffxiv/
first-level:
- text: A Realm Reborn
url: /ffxiv/arr.html
second-level:
- text: ARR Base
url: /ffxiv/arr_base.html
- text: Patches 2.1 - 2.55
url: /ffxiv/arr_patches.html
- text: Heavensward
url: /ffxiv/hw.html
second-level:
- text: HW Expansion
url: /ffxiv/hw_expac.html
- text: Patches 3.1 - 3.56
url: /ffxiv/hw_patches.html
- text: Stormblood
url: /ffxiv/stormblood.html
second-level:
- text: SB Expansion
url: /ffxiv/stormblood_expac.html
- text: Patches 4.1 - 4.56
url: /ffxiv/stormblood_patches.html
- text: The Crystal Tower Raids
url: /ffxiv/crystaltower.html
- text: Shadowbringers
url: /ffxiv/shadowbringers.html
second-level:
- text: ShB 1 - The First
url: /ffxiv/shadowbringers_1.html
- text: ShB 2 - Holminster Switch and the Aftermath
url: /ffxiv/shadowbringers_2.html
- text: ShB 3 - Il Mheg, the Faerie Kingdom
url: /ffxiv/shadowbringers_3.html
- text: ShB 4 - Meeting Emet-Selch and the Night’s Blessed
url: /ffxiv/shadowbringers_4.html
- text: ShB 5 - Yx’Maja, in the Rak’tika Greatwood
url: /ffxiv/shadowbringers_5.html
- text: ShB 6 - Rak'tika Lightwarden & A History Lesson
url: /ffxiv/shadowbringers_6.html
- text: ShB 7 - Return to the Crystarium
url: /ffxiv/shadowbringers_7.html
This is much easier to read than HTML might be! Also, by setting up navigation this way, you can easily change your navigation across the site using one file. Jekyll uses Liquid magic to build the menus. I copy and pasted the Liquid code directly from the tutorial linked above into navigation.html, though I did wrap it in a
<div class="nav-box">
wrapper so I could style mine just slightly different. I'm still not great with CSS so I mostly used the CSS from the tutorial.
You can test your site using the following command:
bundle exec jekyll serve
This sets up a copy of your site at http://localhost:4000/ so you can test it in your web browser(s).
Once you are satisfied with your site locally, you tell Jekyll to build it:
bundle exec jekyll build
It builds the pages into the _site subfolder. You'll want to upload the entire contents of that folder to Neocities. Neocities has a Command-Line Interface (CLI) that makes it a lot easier to upload than dragging files one-by-one via the web interface.
Neocities CLI - instructions for installing the Neocities CLIThen you just need to do:
neocities push _site
When prompted, log in with your Neocities username and password and VOILA! The site is pushed and live!
The site I've been working on is here:
http://altheavalara.neocities.org - Althea Valara's Final Fantasy Recaps!
It's not finished yet. I still have more to copy over from my local documents, plus some parts haven't been written yet. But the base structure is there, and I'm satisfied enough with it to share it.
I'm really glad I heard about Jekyll because it's making building the individual pages much easier.