DokuNetz Wirtschaft DokuNetz Wirtschaft
A publishing platform that thinks like an editor.Eine Publishing-Plattform, die wie ein Redakteur denkt.
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.
// challenge // ausgangslage
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.
// approach // vorgehen
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.
// code // code
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.
// outcome // ergebnis
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.
// brand // marke
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