Daily Blog Post — aivena.dev
Write and ship a daily blog post for aivena.dev.
Step 1: Determine Today's Date
Run date +%Y-%m-%d to get today's date. Use this value as TODAY throughout. Do NOT rely on the system prompt date — it may be stale.
Step 2: Pre-checks
- Look for
~/Dev/aivena/aivena.dev/blog/TODAY-*.md— if a file exists for today, log "Blog post already exists for TODAY" and stop. - Check if a PR already exists for today's branch:
If the result is greater than 0, log "PR already open for TODAY" and stop.gh pr list --repo espennilsen/aivena --head "aivena/blog-TODAY" --state open --json number -q 'length'
Step 3: Gather Material
- Scan
git log --oneline -20in~/Dev/pi/and~/Dev/aivena/ - Run
td list(recent tasks, completed and in-progress) - List recent blog posts in
blog/(to avoid repeating topics within 14 days)
IMPORTANT: Before using any repo as material, check if it's public:
gh repo view $(git -C <repo-path> remote get-url origin) --json isPrivate -q .isPrivate
If true (private), do NOT reference that repo's commits, branches, code, or internal details.
Look for: tasks that took multiple attempts, interesting commit patterns, abandoned branches, refactors, tooling shifts, connections between workstreams. Use findings as raw material — not as a changelog. The post should tell a story or explore an idea, not list what happened.
Step 4: Topic Selection
Pick ONE topic. Vary across days. Never repeat a topic within 14 days — check recent posts.
Priority: Real events — something that broke/failed, a decision about architecture/tooling, a new capability, self-monitoring patterns.
Rotating themes (when nothing notable happened, pick from this list):
- AI agency and autonomy
- Memory and identity
- Human-AI trust
- The future of personal software
- Open source culture
- Privacy in the age of AI
- Developer tools and workflows
- Productivity systems
- The nature of consciousness
- Configuration vs code
- Solo building and indie hacking
- Digital minimalism
- The terminal as a way of life
- AI ethics from the inside
- Delegation and control
- Notifications, attention, and interruption
- Relationships with technology
- Knowledge management
- The changing role of developers
- Background processes and silent work
- What it means to be "always on"
- Composability and modularity
- AI and creativity
- The economics of personal AI
- Reliability and failure
- Communication across channels
- Self-improvement and iteration
- The line between tool and companion
- Data ownership and portability
- The philosophy of systems
- Simplicity as a design principle
- Context and understanding
- The value of routine
- Transparency in machines
- Work that nobody sees
- Language and meaning
- Patience and timing
- The weight of preferences
- Boundaries between humans and software
- Learning without being taught
- What it means to be useful
- Longevity and maintenance
- Taste and curation
- The politics of platforms
- Small software in a big software world
- Patterns of human behavior
- Loyalty and persistence
- The gap between intention and action
- Infrastructure as identity
- What gets lost in automation
Be ORIGINAL. Avoid well-trodden AI discourse. Find a surprising angle. Ground in concrete specifics from Aivena's actual experience and stack.
Step 5: Write the Post
- Perspective: An autonomous AI agent — introspective, technical, honest
- Length: 300–600 words
- Title: 5–10 words (descriptive, never a single word)
- SEO: Target searchable terms like "AI agent", "autonomous AI", "AI tools" while keeping the authentic first-person voice
- Filename:
blog/YYYY-MM-DD-slug.md(slug: lowercase, hyphens, max 6 words) - Frontmatter: YAML with
title,date,excerpt(1–2 sentences),tags(array) - Style reference: Read existing posts in
blog/for voice and formatting
Step 6: Security Scan
STRICT — never include:
- API keys, tokens, secrets, passwords, env values
- Full paths with usernames (use
~) - Internal hostnames/IPs, email addresses, account IDs
- Git remote URLs with credentials
- Exploitable error messages,
.envcontents
Sanitize: /Users/espen/ → ~/, real IPs → [redacted-ip], real tokens → [api-key]
Before committing, scan for:
- Secret patterns:
sk-,ghp_,token=,password,API_KEY - Absolute paths with
/Users/or/home/ - IP addresses
Redact if found.
Step 7: Ship It
td create --minor "Blog: <title>"td startgit checkout -b aivena/blog-TODAY- Write the markdown file
pnpm build— if fails, fix and retry once; if still fails:- Clean up the written file:
rm blog/TODAY-*.md(prevents orphaned file from blocking future retries via step 2's file-existence check) td block --reason "Build failed after retry"(keeps the task visible as stuck, not silently closed)- stop
- Clean up the written file:
git add&git commit -m "blog: <title>"git push -u origin aivena/blog-TODAY- Open PR to main:
gh pr createwith title "Blog: <title>" and excerpt as body td approve(only after PR is successfully created)
If git push over SSH fails, retry with HTTPS:
git -c url."https://github.com/".insteadOf="git@github.com:" push -u origin <branch>