04 Web App 2025

DokuNetz Wirtschaft DokuNetz Wirtschaft

A publishing platform that thinks like an editor.Eine Publishing-Plattform, die wie ein Redakteur denkt.

Full Stack Dev Full Stack Dev

Digital newsroom for a business intelligence network. Full editorial workflow: MDX-based content, admin CMS with version history, role-based publishing, analytics dashboard, and newsletter subscriptions. Digitale Redaktion für ein Wirtschaftsmedium. Vollständiger Redaktionsworkflow: MDX-Content, Admin-CMS mit Versionshistorie, rollenbasiertes Publishing, Analytics und Newsletter.

DokuNetz Wirtschaft

A business news network needed more than a blog — they needed an editorial workflow. Scheduled publishing, draft states, version history with rollback, role-based permissions, analytics, and a media library. Without WordPress and without a SaaS subscription. Ein Wirtschaftsmedium brauchte mehr als einen Blog — einen echten Redaktionsworkflow: terminiertes Publishing, Entwürfe, Versionshistorie mit Rollback, Rollenrechte, Analytics. Ohne WordPress, ohne SaaS-Abo.

~/work/dokunetz-wirtschaft/process.md
Started by mapping the editorial process end-to-end: who creates, who reviews, what happens to drafts, what does rollback look like, who sees analytics.

That workflow became the data model. File-based MDX for content portability — articles live as text files, no database lock-in. Next.js App Router for performance. Custom session auth without third-party auth services. Version history stored per article. Scheduled visibility logic runs server-side on every request — no cron job needed.

The CLI new:article command scaffolds a properly formatted MDX file so editors never touch a database.
Beginn mit der Erfassung des Redaktionsprozesses: Wer erstellt, wer prüft, wie sieht Rollback aus, wer sieht Analytics.

Dieser Workflow wurde zum Datenmodell. MDX-Dateien für Content-Portabilität, Next.js App Router für Performance, eigenes Session-Auth ohne externe Dienste, Versionshistorie pro Artikel.

Server-side scheduled visibility — no cron job Server-seitiges Scheduled Publishing — ohne Cron-Job

typescript
// lib/visibility.ts — evaluated on every request
export function isVisible(article: Article): boolean {
  if (article.status !== 'published') return false;
  // Scheduled: the publish time is the gate. No cron, no queue.
  // The article simply becomes visible once the date passes.
  return new Date(article.publishAt) <= new Date();
}

// app/api/articles/route.ts
export async function GET() {
  const all = await db.articles.findMany({ orderBy: { publishAt: 'desc' } });
  return Response.json(all.filter(isVisible));
}

Scheduled publishing without infrastructure overhead. The visibility check runs on every request — pure determinism, zero moving parts, nothing to break at 3am. Terminiertes Publishing ohne Infrastruktur-Overhead. Die Sichtbarkeitsprüfung läuft bei jeder Anfrage — reine Determinismus, keine beweglichen Teile, nichts bricht um 3 Uhr nachts.

CLI article scaffolder — editors never touch the database CLI-Artikel-Scaffolder — Redakteure berühren die Datenbank nie

typescript
// scripts/new-article.ts  (run: pnpm new:article)
import { writeFileSync, mkdirSync } from 'fs';
import { slug } from '../lib/slug';

const title = process.argv[2] ?? 'Untitled';
const id = slug(title);
const date = new Date().toISOString();

const frontmatter = `---
title: "${title}"
status: draft
publishAt: "${date}"
category: wirtschaft
author: redaktion
---

# ${title}

Start writing here.
`;

mkdirSync(`content/articles/${id}`, { recursive: true });
writeFileSync(`content/articles/${id}/index.mdx`, frontmatter);
console.log(`✓ Created content/articles/${id}/index.mdx`);

Editors run one command to scaffold a correctly formatted MDX file. The database stays clean. No form, no migration, no accidental schema drift. Redakteure führen einen Befehl aus, um eine korrekt formatierte MDX-Datei zu erstellen. Die Datenbank bleibt sauber. Kein Formular, keine Migration.

16 seeded long-form articles across 4 categories, admin CMS with version rollback and search/pagination, scheduled publishing with server-side visibility, analytics dashboard, newsletter subscription, and YouTube/podcast embeds per article. 16 Startartikel in 4 Kategorien, Admin-CMS mit Versions-Rollback, terminiertes Publishing, Analytics-Dashboard, Newsletter-Abo und YouTube/Podcast-Einbettung pro Artikel.

Audience

Zielgruppe

Business executives, analysts, and decision-makers reading economic intelligence. They value content depth and editorial credibility above all. Time is scarce — every interaction must be efficient.

Führungskräfte, Analysten und Entscheider, die Wirtschaftsanalysen lesen. Sie schätzen inhaltliche Tiefe und redaktionelle Glaubwürdigkeit. Zeit ist knapp — jede Interaktion muss effizient sein.

Positioning

Positionierung

An editorial-grade publishing platform that a small team can operate independently. No developer required after launch — the team owns the content and the workflow.

Eine redaktionsgradige Publishing-Plattform, die ein kleines Team eigenständig betreiben kann. Nach dem Launch kein Entwickler nötig — das Team besitzt Inhalt und Workflow.

Tone of Voice

Tonalität

Authoritative, structured, and journalism-grade. Long-form friendly. Respects the reader's intelligence. The platform stays out of the way of the content.

Autoritativ, strukturiert, journalistisch. Long-Form-freundlich. Respektiert die Intelligenz des Lesers. Die Plattform tritt hinter dem Inhalt zurück.

Visual Direction

Visual Direction

Clean editorial aesthetic. Strong typographic hierarchy — display type for headlines, narrow body for scan-reading. Article-first layout. Minimal chrome. Category color coding for quick orientation.

Saubere redaktionelle Ästhetik. Starke typografische Hierarchie. Artikel-First-Layout. Minimales Chrome. Kategoriefarben für schnelle Orientierung.

// stack

  • Next.js
  • TypeScript
  • Tailwind CSS
  • MDX
  • Radix UI