AkiraAkira.dev
3 min de lecture

Spectra, jour un

J'ai amorcé Spectra un jeudi matin. À minuit, il lisait de vraies routes Laravel. Le premier commit qui comptait n'était pas celui qui semblait compter.

aussi en EN PT

J’ai amorcé Spectra à 9h un jeudi. À minuit, il scannait de vraies routes Laravel d’un vrai projet sur mon disque.

C’était le 2026-05-08. Le premier commit du repo a amorcé le template Wails. Le deuxième commit du jour a livré le scanner. Neuf jours plus tard, il y avait une build beta avec auto-updates et billing branché. L’histoire des débuts de Spectra est surtout celle d’une règle que je me suis fixée le jour un.

La décision

J’avais passé le mois précédent à me plaindre de Postman en privé sans rien livrer à ce sujet. Se plaindre est gratuit. Alors j’ai arrêté, ouvert un terminal et lancé wails init.

La stack n’était pas un choix de hype. J’ai pris Go parce que le produit doit appeler PHP en sous-main et parser sa sortie sans me battre contre un runtime de langage. J’ai pris Wails parce qu’Electron embarque 200 Mo de Chromium que je ne veux pas envoyer sur le MacBook d’un développeur Laravel. J’ai pris React parce que l’UI va être chargée et je n’ai aucune envie de réécrire la gestion d’état des formulaires pour le plaisir. Aucun de ces choix n’est malin. Ce sont les choix ennuyeux qui survivent au contact du deuxième mois.

Le premier commit était un template. C’est normal. Ce qui n’était pas normal, c’est la règle qui y était attachée.

Le jour un devait livrer le scanner

La règle : si Spectra ne peut pas lire un vrai projet Laravel le jour où il est amorcé, c’est du vent. Pas du vent la semaine prochaine. Du vent maintenant. Ce qui distingue un client d’API qui connaît ton framework d’un énième exécuteur de requêtes HTTP, c’est le scanner. Tout le reste, c’est de la peinture. Si je livrais la peinture d’abord, je ne reviendrais jamais au moteur.

Alors le deuxième commit du 2026-05-08 a livré un vrai scanner de routes Laravel, persisté dans SQLite. Il appelle php artisan route:list --json contre un chemin de projet choisi par l’utilisateur, parse la sortie et écrit les endpoints dans une base de données locale.

// internal/drivers/laravel/route_list.go
cmd := exec.CommandContext(ctx, phpPath, "artisan", "route:list", "--json")
cmd.Dir = projectPath
cmd.Env = enrichedEnv()

C’est toute l’idée. Aucune inférence maligne. Le framework publie déjà ses propres routes. Spectra lit ce qui est déjà là.

À la fin de ce jeudi, le scanner avait atterri, le filtrage API uniquement avait atterri, et un exécuteur universel de requêtes HTTP avec une base URL de workspace était branché. Un jour, trois commits qui ont prouvé la boucle : choisir un projet Laravel, voir ses routes, lancer une requête. La chose était vivante.

C’était laid. L’UI était une ébauche. Pas de détection d’auth, pas d’inférence de schéma, pas d’exporteur, rien. Mais c’était vivant de la seule façon qui comptait : ça disait la vérité sur une vraie codebase dès l’instant où tu la pointais dessus. Chaque fonctionnalité ensuite était une fonctionnalité au-dessus d’un système qui marche. Aucune n’était une fonctionnalité au-dessus d’une promesse.

La clôture

Le premier commit qui comptait n’était pas l’amorçage. C’était celui qui prouvait que le framework répondrait. Si tu démarres un produit, trouve ta version de route:list --json le jour un. Le reste, c’est de la peinture.

share
Caption copied — paste in the compose box