Darkwood Blog Blog
  • Articles
  • Auto
  • Releases
en
  • de
  • fr
Login
  • Blog
  • Articles
  • Auto
  • Releases

๐Ÿ’ก I created a GDPR-compliant AI app in 1 hour with Symfony

on April 2, 2026

Log in to add a reaction to this post

Today, many developers use AI to generate code.

The question we are addressing here is the following:

๐Ÿ‘‰ How โ€‹โ€‹to transform an idea into an executable system?

And that's normal.

Because we learned to:

  • coding features
  • write functions
  • connect APIs

But not to:

structuring an idea so that it can be executed

At Darkwood, we never start with the code.

We begin with a much more fundamental step:

๐Ÿ‘‰ the reasoning

In this article, we will look at the following in concrete terms:

  1. How to transform an idea into a usable unit
  2. How to use AI to execute this idea
  3. How to apply this in a real project: SketchUp Shape

๐Ÿง  1. An idea is not code

When you think:

โ€œCrรฉer une applicationโ€

Your reflex as a developer is often:

โ€œOkay, Iโ€™m going to code an API, a database, etc.โ€

๐Ÿ‘‰ Bad starting point.

An idea is not yet something you can execute.

That's right:

๐Ÿ‘‰ a vague intention

๐Ÿ’ก The right mental model

At Darkwood, we believe that:

๐Ÿ‘‰ one idea = one task

No more, no less.

Example

โ€œCrรฉer une applicationโ€

becomes :

Task: create_app

It may seem trivial.

But this is a significant change:

๐Ÿ‘‰ You no longer think in terms of โ€œprojectsโ€ ๐Ÿ‘‰ You think in executable units

โš™๏ธ Why this method works: Church, Turing, and the idea as an executable unit

One might think that โ€œprompting an AIโ€ is a recent, almost purely practical topic, linked to current LLM news.

In reality, the problem is much older.

When a developer takes an idea and tries to turn it into an executable system, they always encounter the same question:

How do we move from an abstract intention to a form that the machine can actually process?

This is exactly the type of question that lies at the root of theoretical computer science.

In a previous Darkwood article - Create a Lambda Interpreter in PHP - we already explored this boundary between:

  • the idea of โ€‹โ€‹a calculation
  • and its actual execution by a machine

This article started with Alonzo Church's ฮป-calculus, then linked it to the Turing machine, recalling a fundamental point:

The ฮป-calculus and the Turing machine are two equivalent models of computation

In other words:

  • Church provides a conceptual model
  • Turing provides a model of execution

And that's exactly what interests us here.

๐Ÿง  Church: before execution, a conceivable form is necessary

Alonzo Church does not start from a machine. It stems from a much deeper problem:

What is a function?

and more broadly:

What is a calculation?

The ฮป-calculus responds to this with a radical idea:

Any calculation can be expressed as an abstraction and application of functions.

In this model:

  • A function is a transformation
  • a value can be passed to another function
  • and evaluation consists of applying functions to one another

This is the theoretical root of many things we use today without thinking about it:

  • functional programming
  • the currying
  • closures
  • the combinators
  • pure transformations
  • DSLs

In the article on the lambda interpreter in PHP, this idea was presented in a very concrete way: We started with an expression, tokenized it, parsed it, built an AST, and then evaluated it.

In other words:

before a system executes something, First, it must understand a form

This is exactly the point that interests us regarding AI.

When you give an LLM a sentence like:

Create a house

You haven't given it an execution yet. You give it an abstract form, an intention, a request that is still insufficiently structured.

And that's where Church's intuition becomes useful to us.

Developer translation

When we talk about ideas in this article, we are not talking about vague inspiration or brainstorming.

We are already talking about a manipulable abstraction.

In other words:

An idea must become a unit upon which a system can reason.

That's why, at Darkwood, we make an initial mental shift:

An idea is not yet code.

An idea is already a transformation in progress.

Or, to put it another way:

An idea is a potential task

โš™๏ธ Turing: once the form is defined, it must be executed

Church formalizes calculation on the side of abstraction. Turing, however, answers a different question:

What does a machine capable of performing this calculation look like?

His answer is famous:

  • a memory strip
  • a reading head
  • a current state
  • transition rules

The power of the model does not come from its complexity, but rather from its simplicity.

A Turing machine reads a cell, takes its state into account, applies a rule, possibly writes something, and then moves on.

It's an extremely simple model, but sufficient to reason about what a machine can do.

What interests us here is not teaching the entire theory of automata. It's about recovering a very concrete intuition:

An executable system needs readable units.

and a clear mechanism for switching from one state to the other

This is where the link with modern work on ideas, tasks, and AI agents becomes very concrete.

๐Ÿ” What Church and Turing teach us about working with AI

The essential point is this:

  • Church teaches us to think of calculation as transformation
  • Turing teaches us to think of computation as structured execution

When you combine the two, you get a much healthier way of working with AI.

We stop thinking:

โ€œIโ€™m going to ask the model for some codeโ€

And we start to think:

โ€œIโ€™m going to give him a structured unit of work, that he will be able to transform, then another system can executeโ€

That's exactly what we do at Darkwood.

๐Ÿงฉ Darkwood translation: an idea becomes a task

At this stage, we can simplify the model without betraying it.

Here is the translation we are using as a basis:

Theoretical concept Darkwood interpretation
Abstraction Structured idea
Function Transformation
Memory slot Task
Strip To-do list / stack
Read Execute
Transition Change from one state to another

This gives us a simple rule:

an idea becomes a task

a task becomes a readable unit

A readable unit can be executed.

It is this change of perspective that matters.

Because as long as an idea remains only in your head, it is unusable by the system:

  • nor your terminal
  • nor your IDE
  • nor your LLM
  • nor your orchestrator

cannot work on it properly.

It therefore needs to be given a form.

๐Ÿ’ก The idea as a unit of calculation

This is where our method becomes truly meaningful.

When we say:

Crรฉer une application

It's not a system yet. This is not yet architecture. This is not yet a usable prompt.

But it's not "nothing" either.

That's already it:

a unit of calculation to be specified

At Darkwood, we put it through a nomination and reduction stage.

For example :

Task: create_app

Or

Task: generate_sketchup_shape

From this point on, the machine - or the system of agents - no longer manipulates just a human sentence. She is manipulating an identifiable task.

And once you can identify a task, you can:

  • store it
  • reread it
  • reproduce it
  • transmit it
  • cut it
  • parallelize it
  • to orchestrate it

That's it, that's the real change.

๐Ÿง  Why this is so useful for a developer

A developer often tends to jump directly to implementation:

  • create a folder
  • Install Symfony
  • connect an API
  • write an order

But if the initial idea has not been modeled correctly, everything else becomes unstable.

This leads to what many people experience with LLMs today:

  • vague prompts
  • unclear outputs
  • fragile structures
  • projects that โ€œworkโ€, but lack coherence

The theory of Church and Turing reminds us of something very simple:

The quality of the execution depends on the quality of the initial representation.

In other words:

If you want to improve the performance of an AI, First, you need to represent your idea better.

And that's precisely what we're going to do next with SketchUp Shape:

  • starting from an intention
  • convert it into a task
  • to structure it
  • transform it into a design
  • then only in code

๐Ÿงญ The rule to remember

If this entire section had to be condensed into a single sentence, it would be this:

A useful idea for AI is not an inspiration.

It's a sufficiently clear abstraction to become an executable task

And that's where Church and Turing cease to be distant theory.

They become a practical model for the modern developer:

  • Church helps you think about form
  • Turing helps you think about execution
  • Darkwood helps you connect the two

๐Ÿ“š Concrete example

You have several ideas:

- crรฉer une app
- construire une API
- gรฉnรฉrer un modรจle 3D

๐Ÿ‘‰ You can represent them as a stack:

Stack:
- create_app
- build_api
- generate_model

And then, everything becomes simpler:

You can handle each task one by one

Or

in parallel

โšก 2. Your brain already works like this

You don't need to learn a new system.

๐Ÿ‘‰ You're already using it.

๐Ÿง  Simple case: different tasks

Task A: rรฉpondre ร  un message
Task B: installer un package

๐Ÿ‘‰ No link ๐Ÿ‘‰ You can easily switch between them

โš ๏ธ Complicated case: similar tasks

Task A: coder une API
Task B: refactor la mรชme API

๐Ÿ‘‰ Now, things are getting tough

For what ?

  • same context
  • same mental variables
  • same files

๐Ÿ‘‰ Result:

  • confusion
  • errors
  • fatigue

๐Ÿ’ฅ What this implies

Your brain:

  • has limited memory
  • handles too much context poorly
  • saturates quickly

๐Ÿ‘‰ So:

You can't manage many complex tasks at the same time.

๐Ÿงฉ 3. The real problem: reproducibility

A task is only valuable if you can:

  • find her
  • to revive it
  • share it

๐Ÿ‘‰ Otherwise, it stays in your head ๐Ÿ‘‰ and she disappears

๐Ÿง  Darkwood Approach

We introduce a simple idea:

๐Ÿ‘‰ one task = one pointer

In concrete terms

  • You write your task in Joplin
  • she has an ID
  • This ID becomes your โ€œpointerโ€

And then:

  • in your terminal โ†’ you are referencing this task
  • in your IDE โ†’ same
  • in your AI โ†’ same

๐Ÿ‘‰ Result:

you manipulate the same object, everywhere

๐Ÿ’ก What this changes

You no longer say:

โ€œIโ€™m going to work on my idea.โ€

You say:

โ€œI will carry out this taskโ€

And that's much more powerful.

โš™๏ธ 4. AI: not a magic tool, an execution system

Today, many developers use AI like this:

  • โ€œgenerate a function for meโ€
  • โ€œwrite me a classโ€
  • โ€œFixes this bugโ€

๐Ÿ‘‰ It works.

But you remain within a certain logic:

responsive

๐Ÿง  Darkwood Approach

We completely change the perspective:

๐Ÿ‘‰ AI is becoming an execution system

๐Ÿ— We model like a business

Rather than โ€œmagical agentsโ€, a simple structure is used:

๐Ÿ‘ค You (human)

  • you define the intention
  • you pose the problem

๐Ÿง  AI Architect

  • he understands your intention
  • he breaks it down into tasks
  • he decides how to organize the system

โš™๏ธ Agents

  • they execute
  • they produce code
  • they transform the data

๐Ÿ’ก Key Rule

๐Ÿ‘‰ The prompt = your intention

If your prompt is unclear:

๐Ÿ‘‰ the system is unclear

If your prompt is structured:

๐Ÿ‘‰ the system becomes structured

๐Ÿ”ฅ Example

โŒ Bad prompt:

โ€œGenerate a houseโ€

โœ… Good prompt:

โ€œCreate a structured architectural design of a house,
with walls, roof, proportions and constraints,
then generate SketchUp Ruby code from itโ€

๐Ÿ‘‰ Here, you give:

  • a direction
  • a structure
  • a clear objective

๐Ÿง  What you need to remember

๐Ÿ‘‰ You don't need to be better at coding

๐Ÿ‘‰ You need to get better at:

  • structuring
  • intention
  • orchestration

And that's exactly what we're going to apply now with:

๐Ÿ‘‰ SketchUp Shape

๐Ÿš€ 5. Practical application: SketchUp Shape

Project : ๐Ÿ‘‰ https://github.com/matyo91/sketchup-shape

๐ŸŽฏ Objective

Transformer:

โ€œCreate a houseโ€

in:

๐Ÿ‘‰ Ruby script executable in SketchUp

๐Ÿงฑ Why SketchUp?

  • 3D modeling tool
  • Documented Ruby API: โ†’ SketchUp Ruby API
  • extensible (plugins, scripts)

๐ŸŽ“ Context

I personally learned SketchUp with Sรฉbastien Maison (YouTube)

๐Ÿ‘‰ Here, the goal is not to use their AI:

โ†’ Official SketchUp AI

๐Ÿ‘‰ But to build our own system

โš™๏ธ 6. Pipeline: from idea to (concrete) 3D model

Before going any further, let's take a real-life example.

๐Ÿ‘‰ Here, we're not talking about an abstract API ๐Ÿ‘‰ We're talking about generating a 3D object in SketchUp

๐Ÿงฑ A little background: why SketchUp?

SketchUp is a widely used 3D modeling tool:

  • architecture
  • design
  • prototyping

Personally, I discovered SketchUp thanks to Sรฉbastien Maison, with whom I took a course.

๐Ÿ‘‰ I modeled a house there โ€œby handโ€

And that's where the idea came from:

๐Ÿ‘‰ โ€œWhat if I could generate that directly with code?โ€

โš ๏ธ Why not use SketchUp's native AI?

SketchUp already offers AI:

๐Ÿ‘‰ SketchUp AI

But that's not the point here.

๐Ÿ‘‰ We are developers.

๐Ÿ‘‰ We want:

  • to understand
  • control
  • automate

So we go through:

๐Ÿ‘‰ SketchUp Ruby API

๐Ÿง  The technical entrance

To do this, SketchUp explains:

  • Developer documentation
  • Ruby API

๐Ÿ‘‰ In concrete terms:

You write Ruby like this:

model = Sketchup.active_model
entities = model.entities

And you build:

  • faces
  • volumes
  • groups

๐Ÿงฉ Resources used

To make the AI โ€‹โ€‹more reliable, I used:

  • Ruby API Stubs ๐Ÿ‘‰ to give the LLM a clear view of the available objects

  • Official examples ๐Ÿ‘‰ to understand the real patterns

And if you want to go further:

๐Ÿ‘‰ SketchUp Extensions โ†’ You can package your code as a plugin

โš ๏ธ Important prerequisite

To run Ruby:

๐Ÿ‘‰ You must use the desktop version:

SketchUp Pro Trial

๐Ÿ‘‰ The web version does not allow this (or only in very limited ways)

๐Ÿ” Pipeline Darkwood (applied)

Now that we have the context, here is the actual pipeline:

Intention
   โ†“
Design (LLM #1)
   โ†“
Code (LLM #2)
   โ†“
SketchUp

๐Ÿง  Step 1: Intention

You start with a simple idea:

bin/console app:generate-shape "Create a house"

๐Ÿ‘‰ Nothing more.

๐Ÿงฑ Step 2: Design (LLM #1)

Here, AI does not code.

๐Ÿ‘‰ She thinks

She acts like an architect:

{
  "type": "house",
  "structure": {
    "walls": {...},
    "roof": {...}
  }
}

๐Ÿ‘‰ She decides:

  • proportions
  • elements
  • of the structure

โš™๏ธ Step 3: Code (LLM #2)

Only then:

๐Ÿ‘‰ a second AI transforms this plan into code

model.start_operation('House', true)
...
model.commit_operation

๐Ÿ‘‰ She acts like a developer:

  • It uses the SketchUp API
  • she constructs the geometry

โš ๏ธ 7. Why 2 LLMs (and not 1)

This is one of the most important parts.

โŒ Naive approach

idรฉe โ†’ code

๐Ÿ‘‰ What you get:

  • inconsistent
  • unpredictable
  • difficult to correct

โœ… Darkwood Approach

idรฉe โ†’ design โ†’ code

๐Ÿ‘‰ You separate:

  • ๐Ÿง  the what
  • โš™๏ธ the comment

๐Ÿ’ก It's exactly like in a team:

  • architect โ†’ decides
  • developer โ†’ implements

๐Ÿง  8. The real problem encountered

When I launched:

Create a house

๐Ÿ‘‰ Result:

  • technically valid
  • but visuallyโ€ฆ false

๐Ÿ‘‰ It wasn't a house

โŒ Why?

Because AI did this:

โ€œA house = shapesโ€

๐Ÿ‘‰ She stacked:

  • cubes
  • a roof
  • without logic

๐Ÿ’ฅ The real problem

AI doesn't understand:

  • gravity
  • the proportions
  • actual usage

๐Ÿ‘‰ She doesn't understand:

what a house is

๐Ÿง  Correction made

A layer was introduced:

๐Ÿ‘‰ structured design

Instead of :

{ "parts": [...] }

We force:

{
  "type": "house",
  "foundation": {...},
  "walls": {...},
  "roof": {...},
  "constraints": {
    "symmetry": true,
    "alignment": "centered"
  }
}

๐Ÿ‘‰ Result:

  • consistency
  • stability
  • made credible

โš™๏ธ 10. Technical Stack

๐Ÿงฑ Backend

  • Symfony 8
  • Symfony AI
  • darkwood/navi

๐Ÿ‘‰ Installation:

composer require darkwood/navi

๐Ÿง  Local AI (GDPR)

  • Mistral 3
  • Ollama

๐Ÿ‘‰ everything runs locally

โš–๏ธ Why this is important

  • no external API
  • no data leak
  • total control

๐Ÿ‘‰ You build a system:

GDPR compliant by design

โš™๏ธ 11. Orders

๐Ÿง  Local LLM

ollama pull ministral-3:8b
ollama serve

โš™๏ธ Generation

bin/console app:generate-shape "Create a house"

Useful Options

-o house.rb        # sauvegarde du script
--spec design.json # sauvegarde du design
-v                 # debug complet

๐Ÿง  12. What you really need to remember

โŒ This is not:

  • โ€œHow to use AIโ€

โœ… It is:

๐Ÿ‘‰ How โ€‹โ€‹to structure an idea so that an AI can execute it

๐Ÿ” Final Model

idรฉe
 โ†’ tรขche
 โ†’ design
 โ†’ code
 โ†’ exรฉcution

๐Ÿš€ Conclusion

The future of development is not:

write more code

But :

structuring ideas and orchestrate their execution

๐Ÿ‘‰ At Darkwood:

we are not trying to go faster

we are trying to be fairer

Log in to add a reaction to this post

Site

  • Sitemap
  • Contact
  • Legal mentions

Network

  • Hello
  • Blog
  • Apps
  • Photos

Social

Darkwood 2026, all rights reserved