Skip to main content

Documentation Index

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

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

The Articles page (/articles) reframes blog writing as “Subspace Transmissions” — signals received from deep space, each with a Stardate timestamp and a transmission excerpt. The layout is intentionally minimal: a centered single-column list, generous whitespace, and one subtle motion detail that gives the page life — an animated scanning line that sweeps horizontally across each divider as if a scanner is reading the incoming data.

Layout Overview

The page uses a PageTransition wrapper with a constrained max-width container:
max-w-4xl mx-auto w-full flex flex-col
Header
  • TeletypeText types "Receiving incoming transmissions..." in aurora-magenta mono font
  • H1 reads “Subspace Transmissions”"Transmissions" highlighted in text-aurora-magenta
Article List
  • A space-y-12 flex column holds the motion.article elements
  • Each article slides in from the left (x: -20 → 0, opacity: 0 → 1) when it enters the viewport (whileInView, once: true)
  • A full-width animated divider separates each entry

Articles Data

The three articles are defined in the articles array inside the Nt component:
const articles = [
  {
    date: 'Stardate 4523.1',
    title: 'Optimizing React Context for Deep Space Latency',
    excerpt: 'When your signals take 20 minutes to reach Mars, every render counts. A deep dive into performance tuning.',
    tags: ['React', 'Performance'],
  },
  {
    date: 'Stardate 4102.8',
    title: 'CSS Grid: Building Dyson Spheres in the Browser',
    excerpt: 'Complex layouts don\'t require complex markup. Harnessing the power of CSS Grid for stellar interfaces.',
    tags: ['CSS', 'Design'],
  },
  {
    date: 'Stardate 3890.5',
    title: 'The Ethics of AI in Automated Navigation Systems',
    excerpt: 'Who is responsible when the autopilot decides to fly through an asteroid field? Thoughts on UI and trust.',
    tags: ['UX', 'Thoughts'],
  },
]

Article Entry Structure

Each article entry follows a consistent three-part layout:

Row 1 — Date + Title

On mobile, date and title stack vertically. On desktop (md:), they sit on a single baseline row:
ElementClass details
Stardate labelfont-mono text-sm text-aurora-magenta/70 w-40 shrink-0
Article titletext-2xl md:text-3xl font-heading font-bold text-star-white
On hover, the title transitions to text-aurora-magenta via group-hover:text-aurora-magenta transition-colors. The entire motion.article has the group and interactive class applied, so the hover area covers the full entry.

Row 2 — Excerpt + Tags

Indented md:ml-44 to align with the title (accounting for the w-40 date column + gap-4):
ElementClass details
Excerpttext-star-dim mb-4 leading-relaxed
Tag badgestext-xs font-mono px-2 py-1 bg-cosmic-navy border border-star-dim/20 rounded text-star-dim
Tag badges transition their border to border-aurora-magenta/30 on group hover, subtly reinforcing the active state.

Animated Scanning Divider

The horizontal rule between articles is not a static line — it contains an animated magenta scan pulse:
// Outer container: the static dim line
<div className="h-px w-full bg-gradient-to-r from-transparent via-star-dim/20 to-transparent mt-12 relative overflow-hidden">
  // Inner scan bar
  <motion.div
    className="absolute top-0 left-0 h-full w-1/3 bg-gradient-to-r from-transparent via-aurora-magenta/50 to-transparent"
    animate={{ x: ['-100%', '300%'] }}
    transition={{
      duration: 3,
      repeat: Infinity,
      ease: 'linear',
      delay: index * 0.5,
    }}
  />
</div>
Each divider’s scan is offset by index * 0.5 seconds so the three lines pulse at staggered intervals, creating a cascading effect.

Article Entry Animation

Each motion.article slides in from the left:
<motion.article
  initial={{ opacity: 0, x: -20 }}
  whileInView={{ opacity: 1, x: 0 }}
  viewport={{ once: true }}
>
The x: -20 offset is intentionally subtle — just enough to suggest the article is arriving from off-screen as a transmission, without a jarring horizontal jump.

Stardate Format

Stardates follow the TOS/TNG approximation pattern: a 4-digit integer followed by a decimal fraction. Larger numbers represent more recent entries:
ArticleStardateRelative era
Optimizing React Context4523.1Most recent
CSS Grid: Dyson Spheres4102.8Mid
Ethics of AI3890.5Earliest

Customization

Adding a new article — append an object to articles:
{
  date: 'Stardate 4891.3',
  title: 'WebGL and the Art of Procedural Nebulae',
  excerpt: 'Rendering 10,000 particles at 60fps without breaking a sweat — a tour through shader-based optimization.',
  tags: ['WebGL', 'Performance'],
}
The scanning divider and slide-in animation will apply automatically. Linking to full posts — wrap the title or entire article entry in a Link or <a> element. Because motion.article already has the cursor-pointer class, adding href or to will feel natural. Changing the scan color — replace via-aurora-magenta/50 in the scan bar with any other aurora color (e.g. via-aurora-teal/50) to adjust the pulse hue across all dividers.
The scan bar delay is index * 0.5 seconds. For more than three articles, consider reducing to index * 0.3 so the stagger doesn’t become too stretched out across many dividers.

Build docs developers (and LLMs) love