Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/aurora-borealis/llms.txt

Use this file to discover all available pages before exploring further.

The Writing page adopts the Transmission Archive theme — each blog post is styled as an intercepted signal transmission, complete with a transmission ID, timestamp, and a brief decoded excerpt. The layout deliberately evokes the aesthetic of a mission log or comms archive, keeping the writing section tonally consistent with the rest of the night-sky portfolio.
All page components for this portfolio are inlined inside assets/main.js, which is the compiled Vite production bundle. Do not edit main.js directly. Instead, make changes to the source files before running the Vite build. Editing the pre-built bundle will be overwritten on the next build.

What the Page Displays

The /writing route presents a vertically scrolling list of four blog post entries. Each entry is a styled card that shows:
  • A transmission ID (auto-generated from the post’s position in the array, e.g., TX-001)
  • The post title as the main heading
  • A date displayed in YYYY.MM.DD format to match the space-ops aesthetic
  • A short excerpt (two to three sentences) that acts as a teaser
There is no pagination, search, or filtering in the default implementation — the list is a flat static array rendered in order.

Post Entry Data Structure

All four entries live in a POSTS array in main.js:
// main.js
const POSTS = [
  {
    id: "tx-001",
    title: "Why I Rewrote My Cache Layer in Rust",
    date: "2024.03.12",
    excerpt:
      "After hitting throughput ceilings with my Node.js implementation, I spent three weeks porting the hot path to Rust. Here's what I learned about Tokio, ownership, and writing unsafe code responsibly.",
  },
  {
    id: "tx-002",
    title: "Building Accessible Dark Themes with CSS Custom Properties",
    date: "2024.01.28",
    excerpt:
      "Dark mode isn't just about inverting colors. This post walks through how I structured the Stellar UI token system to pass WCAG AA contrast requirements in both light and dark contexts.",
  },
  {
    id: "tx-003",
    title: "Framer Motion Patterns I Keep Coming Back To",
    date: "2023.11.05",
    excerpt:
      "After a year of shipping Framer Motion animations in production, I've settled on a handful of patterns that cover most use cases without over-engineering the animation layer.",
  },
  {
    id: "tx-004",
    title: "From Nursing to Engineering: What Clinical Work Taught Me About Software",
    date: "2023.08.19",
    excerpt:
      "Systems thinking, error handling, and working under pressure — skills I built at a nurse's station before I ever touched a terminal.",
  },
];

Field Reference

FieldTypePurpose
idstringUnique slug used as the React key; also displayed as the transmission ID tag
titlestringPost heading — keep to 60–80 characters for best card layout
datestringPublication date in YYYY.MM.DD format
excerptstringTwo-to-three sentence teaser rendered as the card body

Adding a New Post Entry

1

Write your post content

Before editing code, have the title, date, and excerpt ready. The excerpt should summarize the post’s central argument or insight — not just restate the title.
2

Append to POSTS

Add a new object at the end of the POSTS array (or at whatever position reflects the chronological order you want):
{
  id: "tx-005",
  title: "Your Post Title Here",
  date: "2024.06.01",
  excerpt: "A two-to-three sentence description of what the post covers and why it matters.",
},
3

Increment the transmission ID

Use the next sequential tx-NNN value for the id field to keep the transmission numbering consistent.
4

Verify the card renders

The new entry will appear at the bottom of the archive list. Confirm the layout looks correct and the date is in the right format.

Editing an Existing Entry

Locate the entry by its id in the POSTS array and update any field directly. The changes reflect immediately on save — no additional wiring is needed.

Removing an Entry

Delete the object from POSTS. The remaining entries will re-render in their new order. You do not need to renumber the id fields, but if visual consistency matters, you may want to update them.

Linking to Full Post Content

By default, the Transmission Archive is a static list — the excerpt is the entire content displayed, and clicking a card does not navigate anywhere. To add navigation:
  1. Add a url or slug field to each post object.
  2. Wrap the card component in a <Link href={post.url}> tag.
  3. Create a corresponding route or external URL for each post.
The most common approach is to link each entry to an external blog (e.g., a Medium or dev.to article, or a Notion page) rather than building a full CMS-backed routing system within the portfolio.
The Writing page is a static list with no CMS integration. All post data lives directly in the POSTS array in main.js. There is no markdown parsing, no file-based routing, and no external data fetching on this page by default.

Styling the Transmission Cards

Each card’s visual style is defined in the project’s CSS. Key class names:
Class nameWhat it styles
.transmission-cardOuter card container — border, background, padding
.transmission-idThe TX-001 badge in the top-left corner
.transmission-dateThe date string in YYYY.MM.DD format
.transmission-titleThe post title heading
.transmission-excerptThe body excerpt text
To match a different aesthetic, override these classes in your own stylesheet or rename them in main.js and your CSS file together.

Case Studies

The in-depth Nebula DB project breakdown — a long-form companion to the shorter blog entries.

About

The career narrative that gives context to why these topics matter to you.

Build docs developers (and LLMs) love