We built a Swedish community for vibe coders. 149 projects later, here’s what we’re learning

Hi everyone,

I’m Niclas from Sweden.

This summer, Daniel and I started building Vibekollen. We live in the same small town, but we met because Daniel noticed that I was also building things with AI.

We both felt that useful projects were appearing everywhere and then disappearing into Facebook groups and scattered links. So during our vacation we built a place where Swedish vibe coders could show what they had made, discover other projects and find each other.

We are not a traditional development team. I work in QA and test, Daniel works as an IT consultant, and we use Codex and Claude Code heavily to plan, implement, review, test and iterate.

Today Vibekollen has 149 public projects from 122 Swedish builders. Those are the numbers visible on the site as I write this. It is still early, but having that many published projects in one place has changed how we think about the next problem.

At first, the main question was how to help more people build.

Now I think the next question is how to help people build well.

We repeatedly see the same kinds of problems in AI-built projects. Security basics are missed. Accessibility and performance come late. Searchability is weak. Sometimes the builder has a working product but does not really know what the coding agent created behind the interface.

That is why we started Baskollen, a free technical review on Vibekollen. It checks security, accessibility, performance and searchability. We show a public score, explain the findings in plain language and give the project owner practical next steps they can take back into their coding workflow.

Baskollen is not a certification, and it does not decide whether an idea is good. It is simply a practical place to start improving what has been built.

The loop we are interested in looks like this:

AI helps someone build
→ tools evaluate what was built
→ the builder understands the problems
→ AI helps improve it

I think this matters because coding agents are bringing in people with strong ideas, product knowledge and domain experience, but not necessarily years of software engineering behind them.

These builders should still be able to ship something they understand, maintain and improve.

Vibekollen is Swedish today. We are starting to explore whether the idea could work internationally, but we are still figuring out what this new group of builders needs most.

What are you seeing in your own projects?

Which tools, checks or forms of support would help new AI builders build better and safer products?

If you work on Codex or developer community initiatives at OpenAI, we are also looking for the right person to speak with about a possible collaboration.

What we can contribute is a growing community of Swedish AI builders, practical feedback from 149 published projects, and a place to test ideas that could help people build better with Codex.

We are open to different possibilities, including early access and feedback, educational content, a small Codex challenge, community offers for Vibekollen builders, or Codex and API support for the two-person team building the platform.

Would someone from OpenAI be open to a short call with Daniel and me, or point us to the right person?

Niclas & Daniel

This is the crucial factor, and gets a bit forgotten in awareness when vibe coding. Still there are fundamentals the AI can’t cover and requires human knowledge to address the aspects you are talking about. While the shift in development is clear, educating a developer (i.e. though studies or courses) is something that is relevant still. The unusual aspect of your team for example, while showing quite some strengths, lacks the knowhow on other aspects of development.

With that being said, this education is also shifting, so helping to shape how education moves further along the path is also necessary. This is a shift that AI is enabling, and people are misreading, AI is an assistant, the humans in the loop for a good qualitative and robust project are more than so relevant. Help shape the path ahead.

There is no secret sauce, helping shape new AI coders doesn’t mean skip learning.

People creating impressive software without any sort of programming experience is one of the coolest parts of LLMs I’ve seen.

It’d be nice to know if a human is performing these checks, or if this is another automated process that Codex is already quite capable of. I’m surprised this isn’t made explicit.

In my experience bad code comes from a failure of communication: the concept is muddy, abstractions overlap and leak, direction changes constantly, and the user speaks on the layer they understand while the model operates in a different reality.

Hard disagree. AI is quickly making SWE experience less dependant in development. Someone - let’s say an accountant - doesn’t need to understand the machinery if the outputs are correct. 30 seconds of processing instead of 5 is irrelevant if the output is worth more.

The whole point here is that builders don’t need to understand or maintain their system. They simply need to trust and be capable of verifying the outputs.

I think there’s a deeper truth here with LLM-usage, because AI absolutely can cover fundamentals of most topics.

An inexperienced doesn’t know how to communicate fundamentals, and AI tends to discuss using the user’s vocabulary and depth.

Shallow Input -> Shallow Output

I wouldn’t be surprised to learn that this is where a lot of the cybersecurity issues arise from. Not from the model purposefully hardcoding an API key, but from the user being frustrated/unknowing, and explicitly demanding it’s hard-coded rather than deal with pesky things like environment variables or middleware.

I would also like to make one thing brutally clear:

If someone vibe-codes a project, then so can everyone else. Even better, they can point a model towards the existing project for grounding and say “copy this”, rather than build from scratch.

It’s for this exact reason I keep my vibe-coded projects to myself, and integrate them into workflows for myself and clients.

Thank you, and I agree that this is an important distinction. AI does not remove the need to learn. If anything, our own knowledge gaps have made that very clear to us.

Vibekollen actually started with a simpler problem. We saw interesting vibe-coded projects being shared once and then disappearing in social feeds. One of the hardest parts for many builders is not creating the first version, but getting exposure, finding users and showing what they have built. We wanted to create one place where people can discover projects, find inspiration and give both small experiments and larger products a chance to be seen.

Baskollen is only one part of that. It is a basic scan showing things that could be improved, not a certification or a list of things someone must fix. Builders receive understandable feedback and prompts they can take directly into Codex or Claude Code. They can then request another scan and see what improved.

It is still early and will continue to develop. Automated checks cannot catch everything. We would also like to add feedback from real people and perhaps video reviews of projects in the future.

The fact that two people without traditional software development backgrounds can build a platform like this is part of our story. It does not mean knowledge is no longer needed. It shows that the tools have changed who can start building, while also creating a need for new ways to learn, review and improve.

We have a long list of things we want to build, but even with Codex it takes time :slight_smile:

I made this with ChatGPT currently as an example, this is mostly what is seen in enterprise. It’s a big thing so, it’s fenced to make it easier for the reader, but it shows where a vibe coder might lack knowledge.

Three Integration Models: Monolithic, Best of Breed, and SaaS

:puzzle_piece: Three Integration Models: Monolithic, Best of Breed, and SaaS

The three models can look deceptively similar from the UI.

The real difference is where responsibility lives, where data crosses boundaries, and where failures can occur.


1. :castle: Monolithic Integration

Example: An organisation runs one large application containing authentication, customer management, billing, reporting, and persistence.

flowchart LR
    U[User] --> APP

    subgraph APP["Monolithic Application"]
        AUTH[Authentication]
        CRM[Customer Management]
        BILL[Billing]
        REPORT[Reporting]

        AUTH --> CRM
        CRM --> BILL
        BILL --> REPORT
    end

    APP --> DB[(Shared Database)]

Core idea

Most functionality belongs to one deployable system.

Modules may be logically separated, but they commonly share:

  • runtime
  • database
  • authentication
  • deployment lifecycle
  • internal domain model

Advantages

  • Simple initial deployment
  • Fewer network boundaries
  • Transactions can remain local
  • Easier initial debugging
  • One primary technology stack

Trade-offs

The convenience creates tight coupling.

A change to the customer model may unexpectedly affect billing, reporting, authentication, or database migrations.

:beverage_box: Vibe-coder hurdle

A vibe coder can easily ask:

“Add subscriptions to the application.”

…and receive something that appears to work.

The difficulty starts when they lack fundamentals around:

coupling → database schemas → migrations → transactions → dependency direction → regression testing

The generated feature may be locally correct while quietly violating assumptions elsewhere in the monolith.

The dangerous question becomes:

“It works — but what else did it change?”


2. :dna: Best-of-Breed Integration

Example: An organisation deliberately chooses specialised systems for CRM, payments, messaging, analytics, and identity.

flowchart LR
    U[User] --> FRONT[Application]

    FRONT --> IDP[Identity Provider]
    FRONT --> CRM[CRM]

    CRM --> INT[Integration Layer]
    FRONT --> INT

    INT --> PAY[Payment Platform]
    INT --> MSG[Messaging Service]
    INT --> DATA[Analytics Platform]

    PAY -. events .-> INT
    MSG -. status .-> INT
    CRM -. updates .-> INT

Core idea

Instead of asking one platform to do everything, the organisation selects the best specialised tool for each capability.

For example:

  • Identity → Auth0 / Entra ID
  • CRM → Salesforce
  • Payments → Stripe
  • Messaging → Twilio
  • Analytics → Snowflake

The architecture therefore becomes an architecture of contracts between systems.

Advantages

  • Strong specialised capabilities
  • Components can evolve independently
  • Vendors can sometimes be replaced independently
  • Teams can select technologies appropriate to each problem

Trade-offs

Complexity moves away from the individual applications and into the connections between them.

You now have to understand:

  • APIs
  • authentication
  • schemas
  • retries
  • queues
  • rate limits
  • event ordering
  • idempotency
  • eventual consistency
  • observability

:beverage_box: Vibe-coder hurdle

This is where “just connect the APIs” becomes a tiny architectural horror movie.

A generated integration might correctly do:

Create Customer → Charge Card → Send Email

but what happens when:

Create Customer ✅
Charge Card ✅
Send Email ❌

Or:

Webhook arrives twice.

Or:

Payment succeeds but the HTTP request times out.

Or:

CRM says ACTIVE while Billing says CANCELLED.

Without fundamentals, the temptation is to keep adding conditionals until the happy path works again.

The missing concepts are often:

contracts → state → ownership → idempotency → retries → consistency → failure recovery → observability

The system stopped being merely code.

It became a distributed system.


3. :cloud: SaaS-Centric Integration

Example: A custom application is relatively small because most major capabilities are consumed from external SaaS platforms.

flowchart TB
    USER[User] --> APP[Custom Application]

    APP --> AUTH[Authentication SaaS]
    APP --> CRM[CRM SaaS]
    APP --> PAY[Payment SaaS]
    APP --> STORAGE[Storage SaaS]

    PAY -. webhook .-> WH[Webhook Handler]
    CRM -. webhook .-> WH
    AUTH -. events .-> WH

    WH --> APP

    APP --> LOCAL[(Local Application Data)]

Core idea

The organisation does not build every capability itself.

Instead, the application acts partly as an orchestrator of externally managed services.

This can massively reduce the amount of infrastructure a small team needs to operate.

Advantages

  • Very rapid development
  • Little infrastructure to maintain
  • Managed scaling
  • Managed security features
  • Powerful capabilities available through APIs
  • Excellent fit for prototypes and smaller teams

Trade-offs

The simplicity is partially an abstraction.

Your system still depends on:

Your application
      ↓
Vendor APIs
      ↓
Vendor authentication
      ↓
Vendor availability
      ↓
Vendor rate limits
      ↓
Vendor data models
      ↓
Vendor pricing
      ↓
Vendor API lifecycle

Your architecture therefore inherits somebody else’s architecture.

:beverage_box: Vibe-coder hurdle

SaaS is perhaps the easiest model to vibe-code initially because the first version can be spectacularly fast:

Prompt
  ↓
Generate UI
  ↓
Add Supabase
  ↓
Add Stripe
  ↓
Add OAuth
  ↓
🎉 SaaS!

Until reality introduces:

duplicate webhook
expired token
API version change
rate limit
tenant boundary
partial failure
permission escalation
deleted remote object
stale local cache

The missing fundamentals tend to be:

OAuth → authorization → tenancy → API contracts → webhook semantics → data ownership → security boundaries → failure handling

The crucial distinction is:

Calling an API is easy. Owning the consequences of calling that API is architecture.


:brain: The Architectural Difference

flowchart TB
    NEED[Business Capability]

    NEED --> MONO[Monolithic]
    NEED --> BOB[Best of Breed]
    NEED --> SAAS[SaaS-Centric]

    MONO --> M1["Complexity lives<br/>inside the application"]
    BOB --> B1["Complexity lives<br/>between systems"]
    SAAS --> S1["Complexity is partly<br/>delegated to vendors"]

    M1 --> FUND[Engineering Fundamentals]
    B1 --> FUND
    S1 --> FUND
Model Primary Strength Where Complexity Hides Fundamental Skill
Monolithic Simplicity Internal coupling Software architecture
Best of Breed Specialisation Integration boundaries Distributed systems
SaaS Speed External dependencies Contracts & operational ownership

:sparkles: The Vibe-Coding Trap

Vibe coding is extremely good at collapsing:

Idea
  ↓
Implementation

Traditional software engineering spends a lot of effort thinking about everything in between:

flowchart LR
    IDEA[Idea]
    --> REQ[Requirements]
    --> DOMAIN[Domain Model]
    --> ARCH[Architecture]
    --> CONTRACT[Contracts]
    --> STATE[State]
    --> FAILURE[Failure Modes]
    --> SECURITY[Security]
    --> TEST[Test Strategy]
    --> OBS[Observability]
    --> CODE[Implementation]

AI can generate the implementation remarkably well.

But generation does not make the intermediate concepts disappear.

That is why a vibe-coded prototype can feel magical at:

“Can we make this work?”

…and suddenly become painful at:

“Can we explain why this works, predict how it fails, modify it safely, and operate it for three years?”

The fundamental gap is therefore not really coding ability.

It is the ability to reason about:

boundaries, contracts, state, ownership, coupling, failure, security, testing, and change.

Those are the parts of software engineering that only become visible once the happy path stops being happy.

After all this, the important steps are currently taking place in education around the world. In Switzerland for example, at the higher education institutions AI is already being integrated as a form to enable and help advanced through studies with the initiative Bildung 6.0 for example. So, for your case, approach institutions near your area. Seminars, exchanges, speakers, all that is important to help shape what is coming.

And most important, bring innovation, AI can do so much, but the human needs remain human.

Fair point. You are right that we need to make this much clearer.

Baskollen is an automated baseline scan created with coding agents. It is not a human code review, security audit or certification. We would love to review every project manually, but that would take an enormous amount of time. We are also not experts in every area and do not want to pretend that we are.

The scan is free and completely optional. It highlights basic things that may be worth improving around security, accessibility, performance and searchability. It then provides prompts that the builder can take into Codex or Claude Code. After making changes, they can request another scan and see whether the result improved.

Codex can already find and fix many of these things. The difficulty is that new builders often do not know what to ask it to check. They may not know which risks or best practices exist yet. Someone using a limited plan may also not want to spend much of their weekly usage on broad, repeated scans. Your “shallow input → shallow output” point is therefore a good explanation of why we think this can still be useful.

I also agree that builders do not need to understand every line of generated code. “Capable of verifying the output” is probably a better way to express what I meant. They still need some understanding of the product, its intended behaviour and what a bad outcome would look like, but that boundary will keep changing as the agents improve.

Baskollen is only a small part of Vibekollen. The main purpose is to create a home where vibe-coded projects, large and small, can be discovered instead of disappearing in a social feed. The scan is also a small incentive for builders to share their work.

We currently offer all of this for free and cover both the time and model usage ourselves. As the community grows, we hope it can lead to more shared tools, human feedback and useful offers for the builders in it.

Thanks for challenging the wording. It helps us explain what we are actually building more clearly.

Thank you. The integration models are a good example of the knowledge gap we are discussing. AI can explain and implement these approaches, but a new builder may not know that these choices exist or what questions to ask.

Your point about education also connects to a larger reason why we are building Vibekollen. By gathering AI builders and their projects in one place, we create a channel where people can continue learning as the technology changes.

AI is moving so quickly that it is difficult to keep up, even for people who use these tools every day. Through newsletters, guides, updates and community discussions, we could share new risks, useful practices, tools and lessons as they emerge.

This should work in both directions. We can see recurring problems across projects, while builders can share what they have discovered. We are not positioning ourselves as teachers who already have all the answers. We are learning alongside the community.

Approaching educational institutions is a good suggestion as well. We are based near Linköping University, so conversations, seminars or exchanges there could be worth exploring.

That is also where the human part becomes important. The agents can help us build and analyse, but the community helps people make sense of what is changing and learn from each other.

Thank you for pointing me towards Bildung 6.0. I will take a closer look.

That might be a bit difficult, but I think you guys would be perfect candidates for the “codex ambassadors” program.

Applications are unfortunately closed right now, but I highly encourage you to keep an eye out for when they open up again.

Thanks! That would honestly be really fun for both Daniel and me.

Until applications open again, we’ll keep building Vibekollen. We’re also looking at expanding beyond Sweden soon, so hopefully we’ll have even more to show by then.

Sounds like a good idea! And welcome to the community, btw. Glad to have you here.

Ah, I understand. Thank you for the clarification. Being part of a community of like-minded individuals pursuing the same goal is always very valuable.