How I built an AI app solo, with 44 years of photography and 3 artificial intelligences
The story of LensUp AI: from an idea born watching terrible LinkedIn photos to a production app on the stores. No team, no investors, no excuses.
The photographer who had enough
I've been a photographer since I was 16. I've seen the view camera, medium format, digital, Photoshop, smartphones, Instagram filters, and now generative AI.
In 44 years I've photographed everything. But there's one thing that in recent years has hurt my eyes more than anything: LinkedIn profile photos.
Blurry. Cropped from group photos. Taken with a phone flash in a bathroom. Selfies with sunglasses. Photos from ten years ago. Or worse: no photo at all.
The problem is always the same: going to a photographer costs time and money. €100-300, an appointment, an hour of posing, a week of waiting.
What if a selfie was enough?
The idea that wouldn't go away
In March 2026, Google released Gemini Flash Image, code name "Nano Banana." In four days, 13 million new users. 5 billion images generated. The world realized AI can generate photos indistinguishable from reality.
I thought: I know what makes a photo professional. I know how light should fall. I know which background works for a corporate headshot. The developers building AI headshot apps don't know these things. They write generic prompts. The results show: plastic faces, flat lighting, the classic "obviously AI" look.
I decided to build an app myself. Solo. No team. No investors.
But not solo in the traditional sense.
My three artificial collaborators
I don't have a CTO. I have three AIs, each with a specific role. Managing AI is exactly like managing human collaborators: precise instructions, check the work, never trust blindly.
Claude (Anthropic). The architect
My strategic consultant. With Claude I did the feasibility analysis, designed the modular architecture, defined 40+ tasks, solved complex problems: credit management, financial circuit breaker, async generation pipeline, GDPR compliance with biometric data.
Claude is the only one who says "wait, this doesn't make sense", and he says it often. He's the conscience of the project.
GitHub Copilot (VS Code Agent Mode). The coder
Brute force. Writes lots of code, fast. But. Copilot is a brilliant laborer with a short memory. Give him free rein and he causes damage. Say "fix this file" and he modifies ten others he shouldn't touch.
One day I told Copilot "add Google Play support" without constraints. He rewrote half the project. I threw everything away. Since then, every prompt has "DO NOT touch other files" in bold.
Google Antigravity. The independent verifier
My second opinion. When Copilot generates code and I'm unsure, I pass it to Antigravity for cross-verification. Especially for compliance: GDPR, EU AI Act Art. 50, consent formats.
Two AIs checking each other's work. Sounds redundant, until you find an error a single AI wouldn't have caught.
The contrarian choices
No subscriptions
My users don't need a profile photo every day. A professional buys 10-30 headshots, uses them, comes back in six months. Charging a monthly subscription for sporadic use is dishonest. "No subscriptions" is a promise to my users.
No advertising
Ever. The user pays for a service, they are not the product. Irreversible.
Zero storage
User photos never touch disk. Processed in memory, passed to Gemini, result returned to client. No image ever saved on my servers. As a photographer, I know how personal photos are. I don't want the promise to depend on trust. I want it embedded in the architecture.
The pipeline: what happens when you take a selfie
Technical flow
1. Face detection. Gemini 2.5 Flash confirms a human face is present.
2. Prompt construction. The backend assembles a professional photographic prompt from immutable templates + user choices.
3. Generation. Gemini 3.1 Flash Image generates the headshot at 1K or 2K resolution.
4. Post-processing. crop to 4:5, resize to exact target dimensions.
5. Watermark. "Made with LensUp AI" for free; "AI Generated" (EU AI Act) for all.
All in background. The user can navigate, exit, use other apps. Notification when ready.
The price of quality: iterating prompts
A typical developer writes: "Generate a professional headshot."
I write: "Transform this selfie into a high quality professional headshot. Keep identity, facial features and skin tone exactly. Apply professional studio lighting coming softly from the left, against a clean white studio backdrop. Sharp focus on the face. Ultra realistic corporate portrait style."
Every word chosen with awareness of how light works in a real studio. "Softly from the left" is the Rembrandt setup. "Sharp focus" counteracts the model's blur tendency. "Ultra realistic" anchors to photography, not illustration.
The disasters
Imagen 4 was unusable
Documented as fallback. Tested it: text-to-image only. doesn't accept images. Useless for selfie-to-headshot. Full day wasted. Lesson: don't trust docs. test firsthand.
RevenueCat webhook broken
Hours debugging. The webhook secret as Azure env var conflicted with Google Credential SDK reading it as JSON. Silent conflict. Lesson: multiple SDKs + env vars = inevitable conflicts. Key Vault solves everything.
Dollar prices in the app
Submission day: prices in dollars instead of euros. Panic. Two hours later: sandbox account set to US region. Production would show euros. Lesson: test env ≠ production env. Check variables before panicking.
Compliance as competitive advantage
Most founders treat GDPR as bureaucratic nuisance. I treated it as a commercial asset.
Facial photos are biometric data. GDPR Art. 9 special category. I implemented dedicated consent, separate from ToS, unchecked checkbox, DPIA documented.
The real differentiator is zero-storage. When a European user asks "where do you store my photos?" I answer: "Nowhere. We don't. Ever." Not marketing, verifiable architecture.
EU AI Act takes effect August 2026. LensUp AI is already compliant.
What I learned about managing AI
Lesson 1
Managing AI is management, not magic.
Claude, Copilot and Antigravity can all reason, code and verify. But I specialized them: Claude thinks, Copilot codes, Antigravity verifies. They can do everything, but assigning specific roles produces better results, exactly like a human team.
Lesson 2
Prompts must be surgical.
"Do this thing" = garbage. "Do this specific thing, in this file, without touching others, with this constraint" = usable results.
The real cost of AI isn't the token. It's the verification.
Generating code costs pennies. Verifying it's correct, hasn't broken anything, respects the architecture, that costs hours.
AI makes you go fast in the wrong direction at the same speed it makes you go fast in the right one.
Lesson 4
Discipline beats speed.
One fix per branch. Green tests before merge. No changes without approval. Slows you 20%. Saves you 100% of the time.
Lesson 5
Domain expertise is irreplicable.
No AI knows Rembrandt lighting beats flat lighting for corporate headshots. No AI knows grey backgrounds are more versatile than white for LinkedIn. 44 years of photography in the prompts. that's the project's IP, not the code.
Current status
| Area | Status |
|---|---|
| iOS App | In review at Apple, manual release |
| Google Play | Developer account verification, closed test underway |
| Backend | Live on Azure, all endpoints working |
| AI Generation | Three resolutions verified (preview, Instagram, full-res) |
| Marketing | Google Ads with €400 promotional credit ready |
| Compliance | Complete legal package ready for signature |
From idea in March to production in April. One founder, three AI collaborators.
Who this is for
If you're a domain expert who thinks AI is "programmer stuff": AI is the tool. Your experience is the advantage.
If you're a developer who thinks calling an API makes a product: code is 30%. The rest is domain, market, compliance, UX.
If you're an entrepreneur who thinks you need millions: my infra costs €20/month at launch. The only non-negotiable resource is time and discipline.
What happens now
Launch is easy. The hard part: first real users, first production bugs, first metrics confirming or denying hypotheses.
Metrics built in from day one. I'll know: free-to-paid conversion, best-selling pack, real cost per generation, which step fails most.
Data decides everything: iterate, pivot, scale, or sell.
Because if there's one thing I've learned in 44 years of photography: the first shot is never perfect. But with the right technique, the second one is always better.
Come ho costruito un'app AI da solo, con 44 anni di fotografia e 3 intelligenze artificiali
La storia di LensUp AI: da un'idea nata guardando foto LinkedIn orribili a un'app in produzione sugli store. Senza team, senza investitori, senza scuse.
Il fotografo che si è stancato
Faccio il fotografo da quando avevo 16 anni. Ho visto passare il banco ottico, il medio formato, il digitale, Photoshop, gli smartphone, i filtri Instagram, e adesso l'intelligenza artificiale generativa.
In 44 anni di carriera ho fotografato di tutto. Ma c'è una cosa che negli ultimi anni mi ha fatto male agli occhi più di qualsiasi altra: le foto profilo di LinkedIn.
Sfocate. Ritagliate da foto di gruppo. Scattate col flash del telefono in bagno. Selfie con gli occhiali da sole. Foto di dieci anni fa. O peggio: nessuna foto.
Il problema è sempre lo stesso: andare da un fotografo costa tempo e denaro. Servono 100-300 euro, un appuntamento, un'ora di posa, una settimana di attesa.
E se bastasse un selfie?
L'idea che non voleva andarsene
A marzo 2026, Google ha rilasciato Gemini Flash Image, nome in codice "Nano Banana". In quattro giorni, 13 milioni di nuovi utenti. 5 miliardi di immagini generate. Il mondo si è accorto che l'AI sa generare foto indistinguibili dalla realtà.
Ho pensato: io so cosa rende una foto professionale. So come deve cadere la luce. So che sfondo funziona per un headshot corporate. I developer che costruiscono app di AI headshot non sanno queste cose. Scrivono prompt generici. I risultati si vedono: facce di plastica, luci piatte, il classico "obviously AI".
Ho deciso di costruire un'app io. Da solo. Senza team. Senza investitori.
Ma non da solo nel senso tradizionale.
I miei tre collaboratori artificiali
Non ho un CTO. Ho tre intelligenze artificiali, ognuna con un ruolo preciso. Gestire AI è esattamente come gestire collaboratori umani: istruzioni precise, controllare il lavoro, non fidarsi mai ciecamente.
Claude (Anthropic). L'architetto
Il mio consulente strategico. Con Claude ho fatto l'analisi di fattibilità, progettato l'architettura, definito 40+ task, risolto problemi complessi: crediti, circuit breaker, pipeline asincrona, compliance GDPR con dati biometrici.
Claude è l'unico dei tre che sa dire "aspetta, questo non ha senso", e lo dice spesso. È il grillo parlante del progetto.
GitHub Copilot (VS Code Agent Mode). Il codificatore
La forza bruta. Scrive tanto codice, velocemente. Ma. Copilot è un manovale geniale con la memoria corta. Se gli dai carta bianca, fa danni. Se gli dici "sistema questo file", modifica altri dieci che non doveva toccare.
Un giorno ho detto a Copilot "aggiungi il supporto per Google Play" senza vincoli. Ha riscritto metà del progetto. Ho buttato via tutto. Da quel giorno, ogni prompt ha la clausola "NON toccare altri file" in grassetto.
Google Antigravity. Il verificatore indipendente
Il mio secondo parere. Quando Copilot genera codice e non sono sicuro, lo passo ad Antigravity per una cross-verifica. Soprattutto per compliance: GDPR, EU AI Act Art. 50, formati di consenso.
Due AI che si controllano a vicenda. Sembra ridondante, finché non scopri un errore che una sola AI non avrebbe trovato.
Le scelte controcorrente
Nessun abbonamento
I miei utenti non hanno bisogno di una foto profilo ogni giorno. Un professionista compra 10-30 headshot, le usa, torna tra sei mesi. Fargli pagare un abbonamento mensile è disonesto. "Niente abbonamenti" è una promessa ai miei utenti.
Nessuna pubblicità
Mai. In nessun caso. L'utente paga per un servizio, non è il prodotto. Irreversibile.
Zero storage
Le foto degli utenti non toccano mai il disco. Elaborate in memoria, passate a Gemini, risultato restituito al client. Nessuna immagine mai salvata. Da fotografo, so quanto sono personali le foto. Non voglio che la promessa dipenda dalla fiducia. voglio che sia inscritta nell'architettura.
La pipeline: cosa succede quando scatti un selfie
Il flusso tecnico
1. Face detection. Gemini 2.5 Flash conferma la presenza di un volto umano.
2. Costruzione prompt, il backend assembla un prompt fotografico professionale da template immutabili + scelte utente.
3. Generazione. Gemini 3.1 Flash Image genera la headshot a risoluzione 1K o 2K.
4. Post-processing. crop a 4:5, resize alle dimensioni esatte del tier.
5. Watermark. "Made with LensUp AI" per utenti free; "AI Generated" (EU AI Act) per tutti.
Tutto in background. L'utente può navigare, uscire, usare altre app. Notifica quando pronto.
Il prezzo della qualità: iterare i prompt
Un developer tipico scriverebbe: "Generate a professional headshot."
Io scrivo: "Transform this selfie into a high quality professional headshot. Keep identity, facial features and skin tone exactly. Apply professional studio lighting coming softly from the left, against a clean white studio backdrop. Sharp focus on the face. Ultra realistic corporate portrait style."
Ogni parola scelta con la consapevolezza di come la luce funziona in studio. "Softly from the left" è il setup Rembrandt. "Sharp focus" contrasta la tendenza del modello a sfuocare. "Ultra realistic" ancora alla fotografia, non all'illustrazione.
I disastri
Imagen 4 inutilizzabile
Documentato come fallback. Testato: text-to-image only, non accetta immagini. Inutile per selfie-to-headshot. Giornata buttata. Lezione: non fidarti della documentazione, testa sempre.
Webhook RevenueCat rotto
Ore di debug. Il secret come variabile d'ambiente Azure conflittava con Google Credential SDK che lo leggeva come JSON. Conflitto silenzioso. Lezione: più SDK + variabili d'ambiente = conflitti inevitabili. Key Vault risolve tutto.
Prezzi in dollari nell'app
Giorno della submission: prezzi in dollari invece che euro. Panico. Due ore dopo: account sandbox configurato su regione US. In produzione avrebbe mostrato euro. Lezione: ambiente test ≠ produzione. Controlla le variabili prima del panico.
La compliance come vantaggio competitivo
La maggior parte dei founder tratta la GDPR come un fastidio burocratico. Io l'ho trattata come asset commerciale.
Le foto facciali sono dati biometrici. Art. 9 GDPR. Ho implementato consenso dedicato, separato dai ToS, checkbox non pre-selezionata, DPIA documentata.
La vera differenza è lo zero-storage. Quando un utente europeo chiede "dove conservate le mie foto?" rispondo: "Da nessuna parte. Non le conserviamo. Mai." Non è marketing. è architettura verificabile.
L'EU AI Act entra in vigore ad agosto 2026. LensUp AI è già conforme.
Cosa ho imparato sulla gestione delle AI
Lezione 1
Gestire le AI è management, non magia.
Claude, Copilot e Antigravity possono tutti ragionare, codificare e verificare. Ma ho scelto di specializzarli: Claude pensa, Copilot codifica, Antigravity verifica. Possono fare tutto, ma assegnare ruoli precisi produce risultati migliori, come con un team umano.
Lezione 2
I prompt devono essere chirurgici.
"Fammi questa cosa" = spazzatura. "Fammi questa cosa specifica, in questo file, senza toccare altro, con questo vincolo" = risultati utilizzabili.
Il costo vero dell'AI non è il token. È la verifica.
Generare codice con Copilot costa centesimi. Verificare che sia corretto, che non abbia rotto altro, che rispetti l'architettura, quello costa ore.
L'AI ti fa andare veloce nella direzione sbagliata alla stessa velocità con cui ti fa andare veloce nella direzione giusta.
Lezione 4
La disciplina batte la velocità.
Un fix per branch. Test verdi prima del merge. Nessuna modifica senza approvazione. Rallenta del 20%. Salva il 100% delle volte.
Lezione 5
L'esperienza di dominio è inreplicabile.
Nessuna AI sa che la luce Rembrandt funziona meglio della luce piatta per un headshot corporate. Nessuna AI sa che lo sfondo grigio è più versatile del bianco per LinkedIn. 44 anni di fotografia nei prompt, quella è l'IP del progetto, non il codice.
Lo stato dell'arte
| Area | Stato |
|---|---|
| App iOS | In review su Apple, rilascio manuale |
| Google Play | Verifica account developer, closed test in corso |
| Backend | Live su Azure, tutti gli endpoint funzionanti |
| Generazione AI | Tre risoluzioni verificate (anteprima, Instagram, full-res) |
| Marketing | Google Ads con €400 di credito promozionale |
| Compliance | Pacchetto legale completo, pronto per firma |
Da idea in marzo a produzione in aprile. Un founder, tre collaboratori AI.
A chi serve questo articolo
Se sei un professionista con esperienza di dominio e pensi che l'AI sia "roba da programmatori": l'AI è lo strumento, la tua esperienza è il vantaggio.
Se sei un developer e pensi che basti chiamare un'API: il codice è il 30%. Il resto è dominio, mercato, compliance, UX.
Se sei un imprenditore e pensi servano milioni: la mia infrastruttura costa €20/mese al lancio. L'unica risorsa non negoziabile è tempo e disciplina.
Cosa succede adesso
Il lancio è la parte facile. Il difficile: primi utenti reali, primi bug, prime metriche che confermano o smentiscono le ipotesi.
Metriche integrate dal primo giorno. Saprò: conversione free→paid, pack più venduto, costo reale per generazione, step che fallisce di più.
I dati decideranno tutto: iterare, pivotare, scalare, vendere.
Perché se c'è una cosa che ho imparato in 44 anni di fotografia: il primo scatto non è mai perfetto. Ma se hai la tecnica giusta, il secondo è sempre migliore.