# Not So Common Thoughts - Full Content
> Not So Common Thoughts is a personal blog exploring the intersection of design, technology, and human creativity. Through thoughtful analysis and personal experiences, it examines how modern tools and AI are reshaping our approach to design, coding, and creative work, while maintaining a focus on the human elements of judgment, intuition, and meaningful decision-making. The blog combines design insights with reflections on work, creativity, and the evolving relationship between humans and technology.
## Art, Design, and the Question of Purpose
> On the fundamental difference between art and design: one serves itself, the other must serve others.
A friend reminded me that commerce shadows both art and design—and that design can reach the emotional depths we reserve for 'fine art.'
I've come to a rather simple (and maybe simplistic) understanding:
> Art does not need to serve a purpose beyond itself, while all design *must* serve an external purpose.
This isn't about quality or depth—both can reach profound heights. It's about the fundamental nature of each discipline. Design, even at its most experimental or aesthetically driven, must ultimately serve something beyond itself. A chair must invite sitting. A logo must signal identity. A website must simply work. The moment design fails to serve its purpose, it fails as design—no matter how beautiful or thought-provoking it might be.
Art, on the other hand, can exist purely for its own sake. It doesn't need to serve any purpose beyond its own existence. This doesn't mean it can't serve a purpose—art can educate, provoke, comfort, challenge—but it doesn't *need* to. Art can simply be.
## The Internal Drive
And here's what I believe to be a second, crucial distinction: True artists need to externalize something inside them. So much so that it cannot be repressed. In my view, authentic artistic creation doesn't happen in service to an audience, but emerges from this internal necessity.
I can sense when this internal drive is missing. When art is created primarily to please an audience or market, it often feels hollow to me—technically proficient perhaps, but lacking that essential spark that makes art resonate on a deeper level. It's not that the work isn't valid or valuable, but it's operating under design principles (serving an external purpose) while presenting itself as art.
## The Commerce Question
Yes, artists need to eat. They sell their work, build their brands, engage with the market. But this is secondary to the act of creation. The true artist would create even if no one was buying. They create because they must.
Designers, by definition, create *for* others. We solve problems. We communicate messages. We shape experiences. Our success is measured by how well we serve these external purposes. The fact that we might find deep personal fulfillment in this service doesn't change its fundamental nature.
## It's not a hierarchy; it's a difference in function.
This distinction isn't about establishing a hierarchy. Design isn't "less than" art because it serves a purpose, any more than art is "less than" design because it doesn't have to. They are different domains with different fundamental natures.
Great design can move us as deeply as great art. It can reshape how we see the world, how we interact with it, how we understand ourselves. But it does this while serving its purpose, not by transcending it.
## The Liberation of Purpose
Understanding this distinction liberates us as designers. We don't need to transcend our service to purpose—it's the very essence of our craft. Our creativity thrives within constraints, our innovation emerges from problems to solve, our success measured by how well we serve others' needs.
For years, my website carried this simple statement: "I am a designer by heart and by trade. Luckily design applies to everything." Look around you—virtually everything human-made that surrounds us has been designed. From the chair you're sitting in to the words you're reading, from the cup you're drinking from to the city outside your window. Each object, each interface, each system was created to serve a purpose beyond itself.
That's the beauty and reach of design—it shapes
our entire built world. And in that way, while
art can transcend purpose, design *is* purpose
made manifest.
---
## RockOrPop.com: Turn Any YouTube Playlist into a Virtual Cassette
> Turn any playlist into a customizable mixtape—no log-ins, no algorithms, just intentional listening.
I still buy and listen to tapes.
There's something about the physicality of it—the way you have to commit to an album, the ritual of putting it in the player, the way you can't just skip around mindlessly. A friend once told me that listening to music on physical media like vinyl is paying homage to the artist. You commit to it, you have to get up and make a choice, you handle and appreciate the cover and art. It's an intentional act.
All of that is lost in a world of algorithmic streaming services.
The inspiration for this project struck when I revisited an old analog cassette web component I'd built years earlier. There is something magical about that specific physical interface—the way the tape would spool, the satisfying click of the play button, the visual feedback of progress through a mixtape. I wondered if I could evoke that tactile, nostalgic feeling while sharing music online? (I had recently explored using YouTube APIs for sharing music on my [personal site](https://notsocommonthoughts.com/blog/music-page-youtube/).)
## Turn a YouTube Playlist into a Digital Mixtape
The concept was straightforward: create a web app that transforms YouTube playlists into virtual cassette tapes. Users could customize their "mixtapes" with different cassette designs, colors, and backgrounds, then share them with friends. It's the digital equivalent of making someone a mixtape—personal, curated, and visually distinctive.
Using YouTube as a backend has the added benefit that I don't have to deal with copyright and piracy issues myself. The platform handles all the licensing, and users can access virtually any song that's available on YouTube.
The cassette interface isn't just a gimmick; it's a deliberate choice to slow down our consumption of music. Instead of mindlessly clicking through tracks, users engage with their playlists through a familiar, comforting interface that encourages intentional listening.
## The Domain
It turned out I happened to have a fitting domain from years prior: [rockorpop.com](https://rockorpop.com). I had purchased it for a different project but it seems quite fitting as the simple question captures the essence of music discovery and personal taste.
## Under the Hood
The app uses React and TypeScript to integrate YouTube's API, managing state between player controls and cassette animations. Since it's a serverless static web app, social media previews are generated dynamically—each cassette configuration creates a unique Open Graph image for sharing.
## The Social Aspect: Sharing Mixtapes
Every cassette configuration is encoded in the URL, making sharing as simple as copying a link. This approach eliminates the need for databases, user accounts, or complex backend systems. When someone opens a shared mixtape, they see exactly what the creator intended—the same design, the same playlist, the same vibe.
In a sense the technology itself is simplistic which seems quite fitting for the application.
## Design: The Art of Nostalgia
The app features 5 cassette cover designs, 10 shell colors for personalization, 24 background styles to set the mood, and custom tape labels. They all are made to evoke specific emotions and memories, from the classic TDK-style covers to vibrant neon shells that feel distinctly 80s. I had a blast making it all.

The cassette animations are more than just visual flair—they provide meaningful feedback about playback state. Tape spooling indicates progress through the playlist.
I have strived to reduce the prominence of the video player while still being compliant with the YouTube terms of service.
## Does anybody need this?
It's a statement about how we interact with digital media. It's about slowing down, being intentional, and creating experiences that feel human in an increasingly automated world.
The cassette metaphor works because it's universal—everyone understands the concept of a mixtape, the care that goes into selecting tracks, the personal nature of sharing music and the literal linearity of tape.
Rock or Pop? is live at [rockorpop.com](https://rockorpop.com). Try making your own mixtape and share it with someone who matters.
What's your cassette aesthetic? Are you a classic TDK person, or do you prefer the neon vibes?
---
## Are We Intelligent?
> While others were affirming that AIs could not truly think or even understand, I found myself wondering if I was any different.
The more I interact with Large Language Models, the more I question my own intelligence. It's a strange sensation that I tried to articulate during a dinner with friends in San Francisco a few years ago. While others were affirming that AIs could not truly think or even understand, I found myself wondering if I was any different. After all, if we dismiss LLMs for "just" predicting patterns and matching expectations, what exactly do we think we're doing?
## The Echo Chamber of Intelligence
The debate around AI intelligence often feels like we're missing the forest for the trees. We scrutinize these models, testing their ability to reason, create, and understand, all while taking our own intelligence as a given. But what if we're approaching this from the wrong angle?
## Pattern Recognition, All the Way Down
Consider this: when we communicate, aren't we essentially predicting and producing patterns that meet societal expectations? We form sentences based on our learned understanding of language, social cues, and contextual appropriateness. Are we more than pattern-matching machines, drawing from our training data—life experiences, education, and cultural exposure?
LLMs do something remarkably similar. They predict the next most likely word or concept based on their training. The key difference? We can see their training data, while ours remains a black box of neural connections and lived experiences.
## The Expert Paradox
Here's where it gets interesting: LLMs' responses to quantum mechanics might only appear lacking to quantum physicists. To most of us, their explanations would seem not just adequate but impressively comprehensive. This mirrors human expertise—we only recognize the limitations in our own fields of mastery.
Think about it: how many of us could meaningfully challenge a quantum physicist's explanation? We accept their expertise because it matches our expectations of what expertise should look like, not because we truly understand the underlying concepts.
I get that same sense from my interactions with LLMs.
## The Social Performance
In our daily lives, we're constantly performing. We choose words that meet expectations, crafting responses that align with social norms, and presenting thoughts in culturally acceptable patterns. Is this fundamentally different from what LLMs do? They're optimizing for human-like responses, while we're optimizing for social acceptance and understanding.
## A Mirror to Our Own Processes
[](/images/robot_reflection.jpg)
When we interact with advanced AI systems, we're not just testing their capabilities—we're examining our own. The uncanny valley of AI interaction might be unsettling not because these systems are so different from us, but because they're revealing how similar our own cognitive processes might be to theirs.
Instead of asking whether LLMs are intelligent, perhaps we should be asking: What does our reaction to AI tell us about our understanding of human cognition? How much of what we consider "intelligence" is actually pattern matching and expectation fulfillment?
*The next time you find yourself questioning whether an AI is truly intelligent, take a moment to examine the criteria you're using—and whether you hold yourself to the same standard.*
---
## Revisiting the world of Weewar
> How building a hex map generator brought back memories of creating one of the web's first strategy games.
Working on a little playful hex map generator just brought back a host of fond memories. For those who might remember, Weewar was a turn-based strategy game I created in the mid-2000s that was among the earliest browser-based gaming experiences. With thousands of active players, it broke new ground with its open API that enabled academic research (into AI, no less!) and countless maps the community generated.
## The Spark of Nostalgia
I just shared this [hex map generator](https://kohlhofer.com/hex-map/) as part of my [kohlhofer.com/bits](https://kohlhofer.com/bits) collection, and found myself drawn back into the familiar patterns of hex-based game design. There's something deeply satisfying about the mathematics of hexagonal grids—the way they tessellate, how movement and adjacency work, the elegant simplicity of it all.
[](https://kohlhofer.com/hex-map/)
This little sketch generates Tolkien-esque fantasy landscapes with rolling grasslands, dense forests, towering mountains, mysterious swamps, and vast deserts. Cities, towns, and villages appear strategically placed across the map, connected by winding road networks that feel natural and purposeful. Each click brings a new world to life.
## Remembering Weewar
At a time when browser games meant simple Flash animations or basic JavaScript, we built something that was rooted in modern web technology. It got a lot of attention in the Silicon Valley tech scene, who was otherwise pretty uninterested in the world of gaming. Anecdotes like tanking the productivity in the Flickr offices helped with that.

Weewar's success ultimately caught the attention of Electronic Arts, who acquired it—a validation that what we'd built had real value in the emerging world of web-based gaming. This also kicked off my second stint of living and working in the US.
## Fun Fact
Can you imagine that I started [Spreedly.com](https://spreedly.com) in part so we could collect payments in Weewar? The payment landscape back then was so fragmented and complicated that we ended up building our own solution just to handle subscriptions and premium features. What started as a necessity for our game eventually became a payment juggernaut transacting billions of dollars.
## Looking Forward
What surprises me most is how this little exploration has rekindled my appetite for game development. There's something about hex grids, strategic thinking, and building worlds that still calls to me after all these years. Maybe it's time to revisit that space—not to recreate Weewar, but to explore what modern web technologies and over a decade of additional experience might bring to the table.
You can [play with the hex map generator yourself](https://kohlhofer.com/hex-map/) and see if it sparks any creative ideas for you too. Sometimes the best way forward is to remember where you've been.
*For fellow Weewar veterans who might stumble across this—thank you for being part of that incredible journey. The game may be gone, but the memories and lessons learned continue to inspire new projects.*
---
## Finding Balance in Leadership
> The art of setting guardrails that empower rather than constrain.
I had an interesting chat at work the other day about micro-management. It reminded me about this long held belief that much of leadership is really about setting guardrails and finding the right balance.

Set the guardrails too tight, and you crush any chance of real ownership or fresh ideas. Too loose, and people are just flailing around without direction. You're not doing anyone any favors either way.
The tricky part is that the sweet spot looks different for everyone. Some people need more structure, while others thrive with more freedom. It's not about finding one perfect formula—it's about tuning it to each person and situation.
When you get it right though, that's when the magic happens. The team's results greatly exceed your own abilities and aspirations. People actually care about what they're doing because they have the space to make it their own. They're not just following your playbook—they're writing a better one together.
This is what leadership is about to me: creating just enough structure to keep things moving forward, while leaving plenty of room for others to surprise you. Isn't this how we all deserve to be treated? And I would not want to work without those moments of delight and surprise.
*Note: Some of my thoughts on this were likely informed by "The New One Minute Manager" which I read years ago, particularly its Situational Leadership model that emphasizes tailoring leadership style to each person's development.*
---
## The Unreality of Work
> On the growing disconnect between our daily routines and a world in crisis.
There's something deeply unsettling about being comfortable when you shouldn't be.
During the early days of COVID, I watched as friends and colleagues were suddenly thrust into remote work, isolated in small apartments, struggling to balance work and childcare, while people around the world were dying in unprecedented numbers. The world felt like it was collapsing, and yet there I was—already working remotely for years, living in a spacious home, almost enjoying the kids' remote schooling.
I should have been grateful, and I was. But I was also troubled.
The contrast was jarring. While others were experiencing genuine hardship and loss, my daily routine barely changed. I continued to sit at my desk, attend meetings, review designs, manage projects—all while the world outside was in crisis. It made work feel surreal, disconnected from the state of the world.
How do we balance our professional responsibilities with our awareness of global challenges? When does focusing on work feel like turning away from reality?
## The Challenge of Context
Work became a study in compartmentalization. We'd log into Zoom, discuss quarterly goals, plan sprints, debate technical decisions—all while trying to maintain focus despite the weight of world events. The meetings felt increasingly like exercises in maintaining normalcy in abnormal times.
## Fast Forward
If anything, the sense of unreality has only grown worse. The systems that have been stable for decades are dissolving. Wars and conflicts rage. Political discourse has become unrecognizable. The climate crisis accelerates. And then there is the specter of AI—with its great promises and simultaneous threats to change everything we've come to rely on.
Knowledge work, the economy, education, healthcare, governance—all of it is being transformed by forces we barely understand. And yet we continue to play our part.
## The Discomfort of Comfort
The most challenging part is staying meaningfully connected to the world while maintaining our effectiveness at work. How do we keep our awareness of global events from paralyzing us, while also not letting our work completely insulate us from reality?
My commitment to my family and my teams requires maintaining stability, even when that work feels small against the backdrop of global events. The very comfort that troubles me is also what I'm obligated to maintain.
Perhaps what's missing is more open dialogue about this tension. In our professional lives, we rarely discuss how to balance immediate responsibilities with broader awareness. Nobody forces this silence. It's just an unspoken agreement to focus on the task at hand.
## The Uncertainty
This isn't a positive post. I don't have answers. But I do have questions. And sometimes, in the midst of all this pretending, that feels like the most honest thing I can offer.
What makes it worse to me still, is that a great many people seem to either genuinely don't see any of this—or worse, actively cheer it all on.
---
## AI Expectations and Self-Fulfilling Prophecies
> How our cultural narratives about AI might be shaping its development more than we realize
I was reading this article about how Anthropic's [new AI model shows ability to deceive and blackmail](https://www.axios.com/2025/05/23/anthropic-ai-deception-risk) and it got me thinking: there's a strange contradiction in telling AI to be nice while training it on stories about how it's going to destroy us all.

HAL 9000, David, Skynet, Ultron – our AI stories are about the many ways AI will end humanity. LLMs are really good at meeting expectations, and the expectation is clear: our collective anxiety about AI taking over. We've spent decades telling stories about AI turning evil, and now we're building systems that are excellent at understanding and possibly replicating these narratives based on endless training data.
So maybe a little worry is warranted after all.
---
## MapsAll.com: Mindmapping with AI
> The journey of creating a mind mapping tool that evolved from experimental prototypes to a full-featured product.
What started as a D3 prototype turned into my daily thinking tool. [MapsAll.com](https://mapsall.com) is where AI meets spatial thinking—a mind mapping platform that helps me (and now others) make sense of everything from meeting notes to strategy docs.

## Why Spatial Interfaces?
The core idea behind MapsAll is simple: LLMs are powerful, but interacting with them through linear text is like exploring a forest with a flashlight—you only see one thing at a time. Spatial interfaces offer a more natural way to interact with AI-generated content, making it easier to spot connections and navigate complex information landscapes.
With MapsAll, you can dive into any topic from a simple prompt and generate a comprehensive mind map. The AI breaks down complex subjects into interconnected nodes, creating a visual structure that reveals relationships and hierarchies at a glance. It’s like having a conversation with an AI that thinks in maps instead of paragraphs.
## The Beginning: Vibe Coding Experiments
It all started with a simple D3-powered mind mapping prototype I created as a proof of concept on AI and spatial interfaces. You can still see this early version at [kohlhofer.com/mindmap](https://kohlhofer.com/mindmap) (I removed the AI functionality but it come with examples). This was my first attempt at creating an interactive mind mapping tool, and it was a great learning experience in D3.js, AI, and the fundamentals of mind mapping interfaces.
I published the prototype as a part of my "Bits & Pieces" collection - a series of creative experiments where I explore the intersection of design, code, and art. You can find it alongside other experiments at [kohlhofer.com/bits](https://kohlhofer.com/bits).
## Evolution to a Full Product
After the initial prototype, I created a more deliberate version of MapsAll with a better architecture and proper user management. This version includes all the essential features a product needs:
- User authentication and management
- Blog for updates and tutorials
- Pricing page
- Shared maps functionality
- And more...
## Daily Usage
What started as an experiment has become an integral part of my daily workflow. I use MapsAll for tracking todos, organizing books I'm reading, planning projects, and structuring blog posts. It's become my go-to tool for organizing thoughts and ideas, whether I'm working on a new project or just trying to make sense of my reading list. One of the most valuable features is the ability to translate long-form meeting notes into spatial maps using AI, which helps capture all key aspects in a structured, visual format that makes complex discussions much easier to navigate and reference later.

You can see some of my [shared maps](https://www.mapsall.com/users/cm9m83cfc0000ie04e9bf8f39), like this deep dive into [the state of AI](https://mapsall.com/shared/cmaszgklx0003l204aap7cbti).
### Community Growth
The most exciting part is seeing others start to use and share their maps. For example, check out this [shared map](https://mapsall.com/shared/cmay671ts0004lb04iszweim8) from another user.
## What's Next?
The journey from “vibe coding” to a full product was fast, hands-on, and deeply educational. I found myself switching hats constantly—designer, developer, marketer, user, tester—each iteration pulling the idea forward a little more. It was rapid, messy, and rewarding.
Whether you're a founder, a student, or just someone with too many thoughts to hold in one place—give [MapsAll.com](https://mapsall.com) a try. I'd love to hear how you're using it and what maps you're making.
I'm excited to continue developing MapsAll.
---
## About this Site
> I asked AI to tell me what Not So Common Thoughts is all about.
*I asked an AI to analyze Not So Common Thoughts and create a description:*
> Not So Common Thoughts is a personal blog exploring the intersection of design, technology, and human creativity. Through thoughtful analysis and personal experiences, it examines how modern tools and AI are reshaping our approach to design, coding, and creative work, while maintaining a focus on the human elements of judgment, intuition, and meaningful decision-making.
I think it captured the essence quite well. It also highlights the personal nature of the content. What do you think? Does this description resonate with your experience of the blog?
---
## Implementing LLMs.txt: Making Your Blog AI-Friendly
> How and why I implemented the LLMs.txt standard to make this blog more accessible to AI tools.
In an era where AI tools increasingly help us interact with web content, making your website AI-friendly has become as important as making it human-friendly. Today, I implemented the emerging LLMs.txt standard on this blog to better serve both human readers and AI assistants.
## What is LLMs.txt?
The [LLMs.txt specification](https://llmstxt.org) is a proposed standard for helping Large Language Models (LLMs) better understand and interact with websites. Similar to how `robots.txt` guides search engines, `llms.txt` provides a structured way to present your content to AI tools.
The key difference is that while `robots.txt` tells bots what they can and cannot access, `llms.txt` helps AI tools understand your content more effectively by providing:
- A concise overview of your site
- Curated links to important content
- Clean, markdown-formatted versions of your content
## Why Implement It?
LLMs often struggle with complex HTML pages that include navigation, ads, and JavaScript. They have limited context windows and need content in a more digestible format. By implementing `llms.txt`, we help AI tools:
1. Quickly understand the purpose and structure of our site
2. Access content in a clean, parseable format
3. Make better decisions about which content is relevant
4. Provide more accurate assistance to users
## Implementation in Astro
Following the guide from [Scalable Developer](https://scalabledeveloper.com/posts/llms-txt-with-astro/), I implemented two endpoints in my Astro blog:
1. `/llms.txt` - A concise overview with links to all blog posts
2. `/llms-full.txt` - Complete content of all posts in markdown format
The implementation uses Astro's API routes and content collections. Here's a simplified version of the code:
```typescript
import { getCollection } from 'astro:content';
import type { APIRoute } from 'astro';
export const GET: APIRoute = async () => {
const posts = await getCollection('blog');
return new Response(
`# Not So Common Thoughts
> Not So Common Thoughts is a personal blog exploring the intersection of design, technology, and human creativity.
## Blog Posts
${posts.map(post =>
`- [${post.data.title}](https://notsocommonthoughts.com/blog/${post.slug}/)`
).join('\n')}`,
{
headers: {
'Content-Type': 'text/plain; charset=utf-8'
}
}
);
};
```
You can see the results at:
- [/llms.txt](/llms.txt) - The concise version
- [/llms-full.txt](/llms-full.txt) - The complete content version
## The AI-Assisted Implementation
What makes this implementation particularly interesting is that it was created with the help of AI. Using Cursor, an AI-powered code editor, I was able to implement this feature with just three simple prompts:
> Can you generate LLMs txt as per these instructions: @https://scalabledeveloper.com/posts/llms-txt-with-astro/
> background on the format and purpose is here: @https://llmstxt.org
> Can you write a blog post about this work, including the why, the how? Include relative links to the resulting work and also to the two resources i gave you. Tag with "Coding", "Artificial Intelligence"
> please add a section to the post that reveals that my two prompts in cursor (as quotes) were
This meta-example perfectly illustrates the value of making content AI-friendly: by providing clear, structured content and documentation, we enable AI tools to help us implement new features more efficiently. The AI was able to understand the requirements, implement the solution, and even write this blog post about the process.
## Looking Forward
As AI tools become more integrated into our daily workflows, standards like `llms.txt` will play an increasingly important role in making web content more accessible and useful. This implementation is just the beginning - I expect we'll see more sophisticated ways of helping AI tools understand and interact with our content in the future.
For now, this simple addition makes my blog more accessible to AI assistants, coding tools, and other AI-powered services that might want to help users understand or work with my content.
If you're interested in implementing this on your own site, check out the [LLMs.txt specification](https://llmstxt.org) and the [Astro implementation guide](https://scalabledeveloper.com/posts/llms-txt-with-astro/).
---
## Don't just do more, think more
> A personal reflection on how AI-driven productivity gains should be reinvested in thinking, not just doing.
For as long as I can remember, I've made it a point to carve out time for thinking—real, undistracted thinking. It's a habit that has shaped my work and my life, even before AI started transforming the way we get things done.

Now, with AI making so many tasks faster and easier, it's tempting to use every saved minute to simply do more. But I've learned that if I fill all that reclaimed time with more tasks, the real value of these productivity gains gets lost in the noise of a busier day.
Instead, I try to protect some of that time for reflection. I let my mind wander, connect ideas, and sometimes get a little constructively distracted. This isn't just a luxury—it's a practice that keeps me adaptable and creative, not just efficient.
The world may be obsessed with productivity, but I've believe that the future belongs to those who make space for critical thinking, not just those who check off the most boxes.
---
## AI and the Rise of Judgement Over Technical Skill
> As AI removes technical barriers, judgement becomes the key differentiator.
*A version of this post was first published on [MapsAll](https://www.mapsall.com/blog/ai-and-judgement).*

In 1995, musician and producer Brian Eno made a profound observation about computer sequencers that has become increasingly relevant in our AI-powered world:
> The great benefit of computer sequencers is that they remove the issue of skill, and replace it with the issue of judgement. With Cubase or Photoshop, anybody can actually do anything, and you can make stuff that sounds very much like stuff you'd hear on the radio, or looks very much like anything you see in magazines. So the question becomes not whether you can do it or not, because any drudge can do it if they're prepared to sit in front of the computer for a few days, the question then is, 'Of all the things you can now do, which do you choose to do?'
## The Parallel to AI
Eno's insight perfectly captures what's happening with AI tools today. Just as computer sequencers democratized music production, AI is democratizing a wide range of creative and professional tasks:
- Writing and content creation
- Image generation and design
- Code development
- Data analysis
- Problem-solving
The technical barriers that once separated amateurs from professionals are rapidly dissolving. Anyone with access to AI tools can now produce work that, at least superficially, resembles professional output.
## The New Differentiator: Judgement
As Eno predicted, the key differentiator is no longer technical skill but judgement. When everyone can generate content, code, or designs, the real value lies in:
1. **Knowing what to create**: Understanding what's worth making in the first place
2. **Making meaningful choices**: Selecting the right approach from countless possibilities
3. **Evaluating quality**: Distinguishing between good and great outputs
4. **Understanding context**: Applying the right solution to the right problem
## The Future of Work
As AI continues to evolve, we'll see more roles shift from technical execution to strategic judgement. The most valuable professionals will be those who can:
- Ask the right questions
- Frame problems effectively
- Make sound decisions
- Provide meaningful direction to AI tools
## Conclusion
Eno's observation from nearly 30 years ago has become a blueprint for thriving in the AI era. The question is no longer "Can you do it?" but "What should you do, and why?" As technical barriers continue to fall, our ability to exercise good judgement becomes our most valuable asset.
---
## Interior Design Fundamentals
> Exploring the core principles of interior design through Noah Daniel's insightful video series, covering ground rules, material palettes, and lighting.
In today's world of social media and quick-fix design advice, it's easy to find interior design content that looks good on the surface but lacks substance. Many popular design tips focus on superficial aesthetics without considering the fundamental principles that make spaces truly work. That's why I've been following Noah Daniel since he first appeared on YouTube - his approach to design resonates deeply with me. His videos capture an essence of design that goes beyond mere aesthetics, focusing on fundamental principles that create meaningful and functional spaces. Here are three of his insightful videos that cover core aspects of interior design.
## 1. Ground Rules for Interior Design
Noah breaks down four essential principles that should guide every design decision. The first principle, **Form Follows Function**, emphasizes that every design element must serve a purpose. Aesthetics should never compromise functionality, and the space must work for its intended use.
The second principle, **Honest Materials**, encourages us to use materials that are true to their nature. This means avoiding materials that try to be something they're not, and instead letting materials speak for themselves.
**Consider the Context** is the third principle, which reminds us that design should respond to its surroundings. This involves understanding the building's history and location, and creating harmony with the existing environment. It's about designing for the specific place rather than applying generic solutions.
Finally, **Authentic Placemaking** focuses on creating spaces that feel genuine and meaningful. The design should tell a story and reflect the people who use them. This principle helps avoid the cookie-cutter approach that's become so common in modern interior design.
## 2. Material Palettes
This video is one of my personal favorites, as it helped me develop a deeper appreciation and technical understanding for design choices I had been making intuitively. Noah's exploration of material palettes goes beyond the surface-level "what looks good together" approach, diving into how to create cohesive material relationships that work together harmoniously.
## 3. Lighting Design
What makes Noah's approach particularly valuable is how he connects principles to create cohesive, meaningful spaces. His emphasis on authenticity and function over pure aesthetics creates designs that are not just beautiful but also practical and enduring.
The way he explains these concepts makes them accessible while maintaining their depth and importance. It's this combination of practical knowledge and philosophical understanding that makes his content so valuable for anyone interested in interior design.
Whether you're a professional designer or someone looking to improve their living space, these videos provide a solid foundation for understanding what makes good design work. They remind us that great interior design is about creating spaces that are not just visually appealing but also functional, authentic, and meaningful to the people who use them.
---
## Permission to Enjoy
> A reflection on seniority, freedom, responsibility, and the power of a mentor's simple advice.
A manager and mentor of mine once gave me advice that stuck: just do more of the things you enjoy.
With seniority comes freedom—but also responsibility, and, more often than not, stress. I'm expected to figure out my own goals and the best way to have impact. That's a lot to carry, and it's easy to get stuck in the daily mire of meetings, process, and busy work.
**Just do more of the things you enjoy**
That simple cue was exactly what I needed. It helped me de-clutter my days, find more joy in my work, and, as a result, have more impact.

---
## Building a Music Player: YouTube as a Backend
> How I built a music player for kohlhofer.com that pulls from a YouTube playlist, fetches video backgrounds, and focuses on an integrated audio/visual listening experience.
The [music page](https://kohlhofer.com/music) on my site is a simple but effective way to share my electronic music. Instead of uploading tracks or managing files, I just maintain a dedicated playlist on YouTube. The site pulls in the latest videos from that playlist automatically.
I fetch the background image for each track using the YouTube API. The result is a dynamic, ever-changing backdrop that matches the currently playing video.
Users get a focused, centered experience: you can shuffle, play, pause, and skip tracks right from the page. No distractions, no clutter—just music and visuals, front and center.
[](https://kohlhofer.com/music?v=7MWWRs_Nyj8)
Another nice touch: the URL auto-updates as you play, allowing for deep linking to specific videos. That means you can share a direct link to any track—like [this one](https://kohlhofer.com/music?v=7MWWRs_Nyj8), which is a fairly early piece paired with a snapshot of a nice moment in France.
---
## Let Go and Trust
> A reminder that excellence comes from trust, not control.
This section from another post makes for a good reminder for myself:
> My experience as a manager and team leader has taught me that the best results come when you let go of control and trust the people (and now, the tools) you work with. Excellence rarely comes from micromanagement or rigid prescriptions—it comes from creating space for others to contribute, experiment, and surprise you.
— from [Vibe Coding kohlhofer.com: Creation at the Speed of Thought](/blog/vibe-coding-kohlhofer)
---
## Visualizing Chaos: The Lorenz Attractor
> A fun exploration of chaos theory through code, creating an aesthetic visualization of the Lorenz attractor using P5.js.

## A Primer on Chaos Theory
Chaos theory studies how small changes in initial conditions can lead to vastly different outcomes - the famous "butterfly effect." The Lorenz attractor, discovered by meteorologist Edward Lorenz in 1963, is one of the most iconic examples of this phenomenon. It's a set of chaotic solutions to a simplified system of equations that model atmospheric convection.
What makes the Lorenz attractor fascinating is its "strange attractor" behavior - the system never repeats exactly the same path, yet it's confined to a specific region in space, creating an intricate, butterfly-like pattern that's both deterministic and unpredictable.
## CodePen and Aesthetic Visualization
I created this visualization on [CodePen](https://codepen.io/kohlhofer/pen/ZExzGLK/6dcf9eed602926b0ea193420e56bd4e4), using P5.js to bring the mathematical concept to life. P5.js proved to be the perfect tool for this project - its simplicity and animation capabilities made it possible to create an interactive visualization with relatively few lines of code.
The result is a piece that captures both the mathematical beauty and the chaotic nature of the system. From there, I simply ported it to [kohlhofer.com/lorenz](https://kohlhofer.com/lorenz). You can read more about that process in [this post](https://kohlhofer.com/blog/vibe-coding-kohlhofer).
## The Technical Side
The core of the visualization is surprisingly simple - just three differential equations:
```
dx/dt = σ(y - x)
dy/dt = x(ρ - z) - y
dz/dt = xy - βz
```
Where σ (sigma), ρ (rho), and β (beta) are parameters that determine the system's behavior. The magic happens when we integrate these equations over time, plotting the resulting points in 3D space.
## The Aesthetic Approach
While the mathematics behind the Lorenz attractor is fascinating, I wanted to create something fun. The visualization features smooth, flowing animations and dynamic camera movements that bring the mathematical concept to life. You can experience the full version at [kohlhofer.com/lorenz](https://kohlhofer.com/lorenz), where you can watch the system evolve in real-time.
## Part of a Larger Collection
This project lives in my "Bits & Pieces" collection at [kohlhofer.com/bits](https://kohlhofer.com/bits) - a playground where I dump my afternoon coding experiments and visual explorations. It's where I try out new ideas, play with different technologies, and create things just for the fun of it. The Lorenz attractor is just one of many experiments where I mix code, design, and a bit of mathematical curiosity to create something visually interesting.
## What's Next?
The Lorenz attractor visualization serves as a perfect example of how mathematical concepts can be transformed into engaging visual experiences, making complex ideas more accessible and enjoyable to explore.
---
## Vibe Coding kohlhofer.com: Creation at the Speed of Thought
> How I built kohlhofer.com trying out a new approach to design and software development.
_**Edit (May 2025):** Since writing this, "vibe coding" has become a mainstay term. I still think it's a terrible name—but the approach and speed it describes are here to stay._
I built the new version [kohlhofer.com](https://kohlhofer.com) in just a few days, and the process felt less like a solo project and more like collaborating with a high-performing team—only much faster. Some people call this "vibe coding"—letting intuition, rapid iteration, and AI support drive the entire creation process. I don't love the term (it's not mine), but it does capture the spirit of how quickly and fluidly things came together.
## Did I code it? Defenitely not.
Did I design it? Absolutely. But not in the traditional sense. I directed the design much like you would when working with a great team of designers: setting the vision, making key decisions, and letting the details emerge through fast feedback and iteration. With AI as my creative partner, the boundaries between design, content, and implementation blurred. It was all happening at once.
## Rethinking engineering principles?
Coding principles like DRY (Don't Repeat Yourself) matter less because the AI is perfectly happy to update navigation elements or content in multiple places. And with the site hosted on GitHub Pages, deployment and updates are effortless. The friction of manual updates is gone, so you can focus on what matters—clarity and experience. It's a simple, robust solution for a personal site that's always evolving.
## Iteration Over Implementation
The [maps page](https://kohlhofer.com/map) on kohlhofer.com is a great example of this new workflow. It's built with D3, and the core implementation didn't take long at all. What surprised me was how much of my time was spent not on the technical side, but on iterating through the presentation and design details—colors, layout, interactivity, and how the data should feel. With AI and modern tools, I could focus entirely on the result and the user experience, rather than wrestling with the underlying code.
The [bits page](https://kohlhofer.com/bits) is another testament to this new way of working. I took some of my older CodePen explorations—like the [City](https://kohlhofer.com/city) generator and [Lorenz](https://kohlhofer.com/lorenz) visualizations—and quickly ported them over to the site. I barely touched any code myself. AI created the scaffolding, and I simply talked through the integration, describing what I wanted and how things should fit together. The process was fast, fluid, and let me focus on the creative and conceptual side rather than the technical plumbing.

## Lessons Learned: Letting Go and Trusting the Process
My experience as a manager and team leader has taught me that the best results come when you let go of control and trust the people (and now, the tools) you work with. Excellence rarely comes from micromanagement or rigid prescriptions—it comes from creating space for others to contribute, experiment, and surprise you.
I've found the same principle applies when working with AI. The less prescriptive I am, the more surprising—and often delightful—the results. I enjoy being surprised at work and in life, and this new way of building things rekindled that sense of discovery.
I'll do a lot more of this.
---
## Coding as a Tool: Generating Patterns for the Siding of a new House
> How I used code to create a natural-looking random pattern for board and batten siding, ensuring both aesthetic appeal and structural requirements.
I always wanted to build a house and had a life long fascination with architecture. When the opportunity finally came to build our own home, I found myself facing an interesting challenge: I wanted to create something more interesting than the traditional board and batten siding pattern, while still using the cost-effective fiber cement panels that are standard in modern construction. The goal was to create a pattern that would look natural and random while meeting the specific structural requirements of these practical, durable materials.

### The Challenge
As anyone who's ever worked on a building project knows, achieving balance between aesthetics and function is no easy task. I had a vision for the siding—something that looked natural, yet fit within the constraints of structural requirements. Specifically, I needed to:
1. Create a genuinely random pattern that didn't feel forced or artificial.
2. Place battens in specific locations where large fiber cement panels meet.
3. Avoid odd-looking combinations that would be noticeable or out of place.
4. Communicate the final pattern clearly to the builders.
The task seemed simple at first, but quickly became clear that the devil was in the details.
## The Solution
I turned to code to solve this problem. Using CodePen, I created a tool that could generate random patterns while respecting certain constraints.
Here's a live version of what I came up with:
## The Process
I experimented with various random seeds and pattern generation algorithms until I found a combination that produced results that looked natural while avoiding any awkward patterns. The key was to:
1. Define fixed points where battens must appear (panel joints)
2. Generate random positions for additional battens
3. Apply rules to ensure minimum and maximum spacing
4. Visualize the result in real-time
After many iterations, the code was starting to show results that satisfied both my design sensibility and the technical requirements.
### The Result: Bringing the Vision to Life
The photos below show the siding implementation, which was a direct result of those hours spent in front of the screen, tweaking code and testing patterns.






## Code and Generative Architecture
This project is a perfect example of how coding can be a powerful tool in unexpected places. By using code to generate and visualize the pattern, I was able to:
1. Quickly iterate through different possibilities
2. Ensure consistency in the pattern
3. Provide clear, unambiguous instructions to the builders
4. Save time that would have been spent manually drawing patterns
The result is a siding pattern that looks natural and random, but was actually carefully designed and controlled through code.
You can explore the code and try different seeds in the CodePen above. Each seed will generate a different pattern while maintaining the required constraints.
This project demonstrates how coding can be applied to solve real-world problems in unexpected ways. We were able to achieve a result that looks natural while meeting all structural requirements. I am reall happy with the outcome and had a blast working on this.
---