VesperaBriefing

Vespera · platform briefing for partners

One account. Four services. An AI layer that is yours.

Vespera is a working software platform — portfolios, shops, an AI assistant with an outreach engine, and a study space — built on one identity, one design language and one bring-your-own-AI layer. It is offered for acquisition, licensing or partnership.

Production-ready · single server · private beta by invitation

Four services on the four long points of the rose. The short points are held for what comes next.

services in production
4
HTTP endpoints
381
database tables, one schema
69
checks in 71 test scripts
2,379

01 · What it is

Software that reflects the person using it.

Most website and shop builders hand everyone the same handful of templates. Vespera generates a complete design specification for each person — palette, typography, layout, texture, motion — and renders the page from it. Two people never get the same site. Around that idea sits a platform: one account across every service, one AI layer each person controls, and an assistant that can act on all of it.

  1. 01

    A specification, not a template

    Mirror and Souk share a design vocabulary of 42 palettes, 41 font pairings, 12 textures and 11 backgrounds; the generator pins what makes a look recognisable and varies the rest.

  2. 02

    One identity

    One users table, one sign-in, Google sign-in, and a single-use code that carries a session from one service to the next without ever putting a token in a URL.

  3. 03

    Bring your own AI

    Each person connects their own provider — 9 presets plus any OpenAI-compatible endpoint — or pastes one Groq key and lets Easy mode configure every job. Keys are encrypted; nothing is locked to one vendor.

  4. 04

    An assistant with guardrails

    Anchor’s assistant edits portfolios, shops and study material on request — at most 25 changes and 3 deletions per instruction, every change logged, reversible ones undoable.

Why it matters to a business: the hard, unglamorous parts — identity across origins, per-user AI credentials, provider fallback under rate limits, guarded write access for an AI agent, Gmail sending that respects quotas and consent — are already built, tested and running. A new product inherits them on its first day.

vspera.me — the portal and shared sign-in.Live public page

02 · The four services

Four products, one platform underneath.

Each service stands on its own and shares the account, the design language and the AI layer with the others. Feature lists below are complete and taken from the code.

S.01

Mirror

Portfolios & CVs · mirror.vspera.me

Purpose
A portfolio and CV builder that generates a complete design specification for each person, then keeps the content live for any site that wants to read it.
Who it is for
Students, researchers, engineers and creatives who need a distinctive public presence and up-to-date CVs without designing them.
Stack
Flask · SQLAlchemy · PostgreSQL · Next.js 15 · React 19 · TypeScript · shared design vocabulary
  • 97endpoints
  • 13test scripts
  • 374checks

Features

Generation

  • AI-generated design specification per person — palette, typography, layout, texture, motion — rendered by a spec-driven renderer, not a theme picker
  • Content analysis and a writing assistant for summaries and project text
  • Deterministic engine seeded from the person’s data when no AI is connected — still unique per person
  • Style gallery with named looks to start from

Content

  • Portfolios with ordered sections and projects
  • Rich project pages built from content blocks
  • Automatic translation of a whole portfolio into French or Arabic (structure-preserving JSON translation)
  • Academic and professional CV generator from the same data
  • Media uploads with per-plan limits

Publishing

  • Public portfolio API: published content as JSON
  • Linked bespoke sites — a separate site on its own domain reads Mirror live and is edited from the Mirror dashboard
  • Draft / published states and view counts

Account & business

  • Google sign-in; accounts can exist without a password; e-mail verification and e-mail change flow
  • Hosts the shared sign-in and the cross-service handoff for every Vespera service
  • Plans, subscriptions and entitlements — per service or as a bundle — with payment arranged off-platform
  • Admin console: people, plans, subscriptions, media limits, billing mode, mail settings, audit log, platform-wide overview, impersonation for support
S.02

Souk

Shops & landing pages · souk.vspera.me

Purpose
A shop builder with generated storefronts, a page builder, and the complete order lifecycle — designed for sellers who are paid directly, outside the platform.
Who it is for
Independent sellers, makers, small services and food or rental businesses that want a storefront that looks like nobody else’s and a clear order process.
Stack
Flask · SQLAlchemy · PostgreSQL · Next.js 15 · React 19 · TypeScript
  • 90endpoints
  • 9test scripts
  • 273checks

Features

Storefronts

  • 40 named storefront styles — commerce foundations and art movements from Bauhaus to risograph
  • Generated structure: 6 headers, 6 hero layouts, 10 product-card designs, 4 catalogue layouts, 8 price styles, 9 button styles
  • Style gallery and one-click restyle; the seeded generator keeps two shops in the same style different
  • Shop kinds: products, services, digital, food, rental, mixed

Page builder

  • Landing pages from 23 block types — hero, features, products, gallery, testimonials, pricing, team, video, timeline, flip book, PDF, downloads, countdown, map, comparison, social links and more
  • 60 distinct layouts across 11 of those blocks
  • Closed vocabulary: anything the renderer cannot draw is refused at the door; links are restricted to safe schemes and video embeds to an allowlist
  • Pages reuse the shop’s own design system

Commerce

  • Products, categories, stock, featured and hidden items
  • Cart and checkout
  • Full order lifecycle — 13 states from pending to delivered, with courier stages, disputes and refunds
  • Buyer–seller agreement without touching money: the buyer declares payment, the seller confirms it, and an order completes only when both sides have confirmed
  • Every transition on a timeline; goods return to stock on cancellation or refund
  • Buyer–seller messaging, notifications and reviews

Reach

  • Translations of shop content
  • Site API for linked shop sites — a live site on its own domain reads the shop and is edited from the Souk dashboard
  • Plans and entitlements shared with the rest of Vespera
S.03

Anchor

Assistant & outreach · anchor.vspera.me

Purpose
A personal command centre: tasks, flexible Rooms, an AI assistant that acts across every Vespera service, and an outreach engine that writes, sends, tracks and reads replies to personal letters at scale.
Who it is for
Job seekers, researchers applying for positions, freelancers and small teams who write to many people and need every letter to be personal — and anyone who wants one assistant for their whole Vespera account.
Stack
Flask · SQLAlchemy · PostgreSQL · Next.js 15 · React 19 · TypeScript · Gmail API · Telegram Bot API
  • 188endpoints
  • 41test scripts
  • 1,432checks

Features

The assistant

  • Chat that acts on the person’s data: 43 actions across Anchor, Mirror and Souk, plus 79 generated from Atlas’s operation registry
  • Guardrails on every instruction: at most 25 changes, 3 deletions and 20 creations; a deletion must name its target (“all” is refused); irreversible order actions count as deletions
  • Refusals are explained and counted: after 3 strikes the assistant loses write access until an admin restores it
  • Action trail of every change, with undo where the change is reversible
  • Long-term memory the person can read and edit; multiple saved chats
  • Vision: images in chat, or described for a model that cannot see
  • Voice: wake word, speech-to-text, text-to-speech, and read-along highlighting of the spoken word
  • Runs on the person’s own model, or in the browser through Puter when they have none

Work & organisation

  • Tasks with priorities, deadlines, focus and notes; mood and energy check-ins feeding a daily balance
  • Rooms: spaces the assistant builds on request from 19 field types, 14 layouts and 12 presets — a contact list, a reading log, a budget
  • Scout: searches the web and reads the pages itself to find openings, and reports a lead as verified only when its page was actually retrieved

Outreach engine

  • Import up to 2,000 recipients from a spreadsheet of ready e-mails, a contact file, or leads found by Scout
  • One personal AI-written letter per person, 4 written at a time in the background, in the language chosen (interface in English, French and Arabic); machine phrasing detected and rewritten once
  • Review, edit and approve every letter; nothing is sent without approval
  • Gmail sending with human pacing (1.2 s minimum between messages), a rolling 450-per-24 h cap, and scheduling up to 90 days ahead; rate limits defer a letter, never fail it
  • Open and click tracking (scanner clicks and bot opens are filtered), bounce detection
  • A reply watcher that reads answers in the Gmail thread and sorts them into 8 kinds — interested, negotiation, question, rejected, unsubscribe, automatic reply, bounce, other — with a summary and a suggested next step
  • Orphan-reply matching: answers that arrive outside the original thread (out-of-office notices, new threads) are still tied to their letter
  • Kind-reply drafts for every person who answered, and an optional request for feedback after a refusal — always drafts, always approved by the person
  • Contact profiles: a mini-CRM of everyone written to, with status, notes, tags and the full timeline
  • Insights: the letter-journey map from draft to answer, a 30-day activity chart and the sending capacity left today

Mail & notifications

  • Casual mail: ordinary untracked e-mail to up to 20 people
  • Signature studio with 4 designed layouts, optionally applied to every message
  • Inbox reading with sender preferences
  • Telegram bot: link an account, ask for replies and status, receive alerts as answers arrive
  • Gmail consent split in two: sending needs only the send permission; reading replies is a separate, optional permission
S.04

Atlas

Study & thinking space · atlas.vspera.me

Purpose
A study planner, a library that answers questions about its documents, infinite whiteboards, interactive guides, study groups and projects — every operation also drivable from Anchor’s chat.
Who it is for
Students, study groups, teachers and small project teams who plan, read and think visually.
Stack
Flask · SQLAlchemy · PostgreSQL · Next.js 15 · React 19 · TypeScript · Mermaid · operations in the shared platform package
  • 83operations
  • 4test scripts
  • 144checks

Features

Plan

  • Subjects, tasks and a calendar of study blocks
  • AI-generated study plans
  • A home view with today’s tasks, upcoming exams, next sessions, recent boards and guides

Read

  • Library of 5 resource kinds — PDFs, links, notes, images, files — with PDF text extraction
  • Ask questions of a document and get summaries grounded in the most relevant passages

Think

  • Infinite whiteboards with 10 element types — sticky notes, text, shapes, arrows, pen, images, files, stickers, Mermaid diagrams, frames — and mind maps
  • Multi-user sync with per-element revisions
  • AI “Full board”: a whole presentation-quality board from a topic — title, mind map, laid-out sections — using web search where the model supports it, with links verified
  • Interactive AI-generated guides: quizzes, checklists, steps, callouts, diagrams, progress tracking and “explain this”

Together

  • Study groups with chat, invitations and member roles
  • Projects with milestones, AI task splitting across members, and AI roadmap boards
  • Sharing by person, group, link with view or edit roles
  • 83 operations in one shared registry; 79 of them can be driven from Anchor’s chat

03 · The platform underneath

Built once, inherited by every service.

A shared Python package, vespera_platform, carries what every service needs: identity, billing, AI, encryption, the design vocabulary, Google integration and Atlas’s operations.

01Identity & sign-on

  • One users table and one JWT secret shared by every service
  • Sign in once on Mirror; a signed, single-use, two-minute code carries the session to Souk, Anchor or Atlas, which exchange it by POST for a token stored under their own origin
  • Google sign-in; Gmail consent requested separately for sending and for reading

02The AI layer

  • Bring your own provider: 9 named presets (Anthropic, OpenAI, NVIDIA, Groq, Together, OpenRouter, Mistral, DeepSeek, Ollama) and any compatible endpoint
  • Easy mode: one Groq key; the platform reads Groq’s live catalogue and builds an ordered chain of up to 8 chat models, plus vision, speech and transcription models
  • Priority routes: up to 5 providers × 8 models each, tried top to bottom; Easy mode can take a slot
  • Failure sorting: a bad key or no credit skips that provider; a rate limit, capacity error, timeout or vanished model puts that one model on a cooldown shared by every worker process
  • When everything is cooling, wait at most 8 s for the soonest model, then fail with a message that says which limit was hit and when it resets
  • Native web search and code tools used where a model has them; separate roles for vision, speech, hearing and search

03Languages

  • English, French and Arabic across the interfaces, with full right-to-left layout for Arabic
  • Content translation in Mirror and Souk; letters written in the language chosen

04Security

  • AI keys and Google tokens encrypted at rest (Fernet), never logged, never returned to a browser — only a masked hint
  • SSRF protection: every address a user-supplied endpoint resolves to is checked before the server calls it
  • Rate limits on every service, counted per account in Anchor
  • Assistant guardrails, a generic link-safety pass on AI-written content, closed vocabularies for anything rendered
  • Additive migrations, isolated per service: each has its own version table and a guard that refuses another service’s tables

05Operations

  • One server: nginx, 9 systemd units (frontends, backends, Telegram bot), gunicorn, Let’s Encrypt certificates
  • Scripted deploys; a database dump is taken before releases
  • Background work without a queue server: the database is the queue (row claiming with SKIP LOCKED) for scheduled sending
  • Media in Cloudinary; servers in Paris (EU)

Quality, counted

Tests are self-contained Python scripts run against an in-memory or throwaway database. The repository holds 71 of them with 2,379 check statements (a check inside a loop counts once), counted from the source on 2026-10-02.

  • 46,203lines of Python (non-blank, excluding tests)
  • 83,435lines of TypeScript and CSS in the four frontends
  • 69tables in one PostgreSQL schema
  • 46additive migrations
ComponentTest scriptsChecks
Mirror13374
Souk9273
Anchor411,432
Atlas4144
Shared platform4156
Total712,379

04 · Maps & diagrams

How it fits together.

Drawn from the code, not from a slide template. Every box below exists in the repository.

A · System architecture

Browsers — phone, tablet, desktopvspera.me · mirror.vspera.me · souk.vspera.me · anchor.vspera.me · atlas.vspera.me · linked sites on their own domainsnginxTLS by Let’s Encrypt · one server block per subdomain · reverse proxy · static sitesMirrorNext.js frontendReact 19 · TypeScriptFlask APIgunicorn · systemdSoukNext.js frontendReact 19 · TypeScriptFlask APIgunicorn · systemdAnchorNext.js frontendReact 19 · TypeScriptFlask APIgunicorn · systemdAtlasNext.js frontendReact 19 · TypeScriptFlask APIgunicorn · systemdTelegram botsystemdvespera_platform — the shared Python package every backend importsidentitybillingAI layerencryptiondesign vocabularyGoogleAtlas operationsPostgreSQLone database · 69 tablesEach person’s own AI providerGoogle — sign-in and Gmail APITelegram Bot APICloudinary — mediaoutbound HTTPSoutbound HTTPSone server · Paris (EU)

Scroll sideways to read the whole map, or open it full screen.

One server. nginx terminates TLS for every subdomain and routes to each service’s Next.js frontend and Flask backend; all backends import the same platform package and share one PostgreSQL database. External calls go to the person’s own AI provider, Google (sign-in and Gmail), Telegram and Cloudinary.

B · Service connection map

Who acts on whatAssistantAnchor chat · voicethe person’s modelGuard≤ 25 changes≤ 3 deletions≤ 20 creationsdeletes name a target3 strikes → read-onlyaction trail · undoMirrorportfolios · sectionspublish · unpublishSoukshops · products · pricesorders · pages · restyleAtlas79 operations, generatedfrom the shared registry —the same functions asAtlas’s own APIAnchor itselftasks · rooms · memorycontacts · Scout · importin-process · no HTTP between serviceslinks in AI-written content: http(s) onlySingle sign-on handoffBrowserMirrorSouk · Anchor · Atlas1 · sign inpassword or Google2 · redirect + codesigned · single use · 2 min3 · open the service page?handoff=code — a code, never a token4 · POST the code…/handoff/complete5 · token in the bodycode burned on use6 · API calls with the tokenstored under the service’s origin

Scroll sideways to read the whole map, or open it full screen.

Anchor’s assistant reaches Mirror, Souk and Atlas in-process through guarded actions — no service calls another over HTTP. Atlas’s operations live in the shared package, so Atlas’s own API and Anchor’s chat run the same functions. Right: the single sign-on handoff.

C · Data and identity map

Shared — 8 tables in vespera_platformusersai_credentials · encryptedaudit_logsemail_tokensgoogle_accounts · encryptedplansplatform_settingssubscriptionsMirror5 tablescv_documentshandoff_usesportfoliosprojectssectionsSouk14 tablescart_itemscartsconversationsmessagesnotificationsorder_eventsorder_itemsordersproductsreviewsshop_categoriesshop_sitesshopssouk_pagesAnchor28 tablesprefix anchor_ai_cooldownsactionschat_messageschatscontact_eventscoresemail_draftsinbox_sender_preferencesmail_eventsmail_tracksmemoriesmood_logsnotesnoticesnudgesopportunitiesoutreach_batchesoutreach_rowsprofilesproject_fieldsprojectsroom_itemsroomssignaturesstrikestaskstelegram_link_codestelegram_linksAtlas14 tablesprefix atlas_blocksboardsgroupsguide_progressguidesmembersmessagesmilestonesplansprojectsresourcessharessubjectstasksevery row belongs to a user: owner_id / user_id → users.idEach service migrates only its own tables: a separate Alembic version table plus an include_object guard.46 migrations in total, all additive · one PostgreSQL database in production

Scroll sideways to read the whole map, or open it full screen.

69 tables in one schema. 8 shared tables hold identity, credentials and billing; each service owns its own tables and migrates them in isolation.

D · The AI layer

A requestchat reply · letterreply reading · boardplan · translationPriority 1 · a provider routee.g. OpenRouter, OpenAI, Mistral…model Amodel Bon failurePriority 2 · Easy mode (one Groq key)ordered chain from the live catalogue, up to 8gpt-oss-120bllama-3.3-70bqwen3-32bgpt-oss-20bllama-3.1-8bon failurePriority 3 … up to 5 routeseach with up to 8 models, tried in orderAnswer returnedthe first model that succeedsProvider problembad key · no credit→ skip this whole routeModel problem429 · capacity · timeout · gone→ cooldown for this model,shared by every workerEverything coolingwait ≤ 8 s for the soonest→ a clear error: which limit,and when it resetsRoles beside chatVision · image → textSpeech · text → speechHearing · whisper-large-v3 → whisper-large-v3-turboSearch · native web searchKeys are encrypted per person and only ever sent to the address they were saved with.

Scroll sideways to read the whole map, or open it full screen.

A request walks the person’s routes top to bottom and each route’s models in order. Easy mode is one of the routes. Failures are sorted: provider-level problems skip the route, model-level problems put that model on a shared cooldown.

F · How a next service plugs in

MirrorportfoliosSoukshopsAnchorassistantAtlasstudyAccount & sign-onusers · JWT · handoff code · GoogleDesign languagetokens · light/dark · design vocabularyAI layerroutes · Easy mode · keys · cooldownsOperation registryops.name(ctx) → HTTP and assistantPlans & entitlementsper-service scope or bundleDeploy & migrationssystemd · nginx · certbot · isolated AlembicNext serviceunnamed by designinherits all sixon day one

Scroll sideways to read the whole map, or open it full screen.

What a new service inherits on its first day. Atlas was the fourth service and was built this way; the slot on the right is deliberately unnamed.

05 · The outreach engine

Hundreds of personal letters, and every answer read.

The most developed part of the platform, and the one most directly useful to a business: it turns a list of people into personal letters, sends them through the person’s own Gmail at a human pace, and reads what comes back.

E · The pipeline

  1. 01ImportSpreadsheet, contact file or Scout leads · up to 2,000 people
  2. 02ComposeOne letter per person, 4 at a time, machine phrasing rewritten
  3. 03ApproveReview, edit, approve or schedule
  4. 04SendGmail, 1.2 s apart, 450 per 24 h, deferred on limits
  5. 05TrackOpens, clicks, bounces · bots filtered
  6. 06ReadReply watcher · 8 kinds · orphan replies matched
  7. 07ActReply drafts, feedback requests, contact profiles, Telegram alerts
Seven stages, each a separate, tested service in Anchor’s backend. A person approves every letter and every reply draft; nothing in the chain sends on its own.

The letter journey (Insights graph)

Illustrative numbers

Letters → Sent: 376Letters → Waiting to send: 24Sent → Delivered: 364Sent → Bounced: 12Delivered → Opened: 228Delivered → Not opened: 136Opened → Interested: 9Opened → Question: 6Opened → Negotiation: 3Opened → Rejected: 10Opened → Automatic replies: 16Opened → No reply: 184Not opened → No reply: 136Letters: 400Letters400 · 100%Sent: 376Sent376 · 94%Waiting to send: 24Waiting to send24 · 6%Delivered: 364Delivered364 · 91%Bounced: 12Bounced12 · 3%Opened: 228Opened228 · 57%Not opened: 136Not opened136 · 34%Interested: 9Interested9 · 2.3%Question: 6Question6 · 1.5%Negotiation: 3Negotiation3 · 0.8%Rejected: 10Rejected10 · 2.5%Automatic replies: 16Automatic replies16 · 4%No reply: 320No reply320 · 80%Answered by a person = interested + question + negotiation + rejected

Scroll sideways to read the whole map, or open it full screen.

A recreation of Anchor’s Insights flow. Band width is the number of letters. The numbers are illustrative, chosen for legibility — they are not real campaign data.
Show the numbers as a table
FromToLetters
LettersSent376
LettersWaiting to send24
SentDelivered364
SentBounced12
DeliveredOpened228
DeliveredNot opened136
OpenedInterested9
OpenedQuestion6
OpenedNegotiation3
OpenedRejected10
OpenedAutomatic replies16
OpenedNo reply184
Not openedNo reply136
  • ConsentSending asks only for Gmail’s send permission. Reading replies is a second, optional permission.
  • PacingRate limits and daily caps defer a letter with back-off; they never fail it.
  • HonestyOpens are shown as hints, not facts; scanner clicks and bot opens are stored apart and not counted.
  • Respect“Do not contact me” is honoured: no reply draft, no feedback request, ever.

06 · For acquirers & partners

What you would be taking on.

Vespera is offered as a whole or in parts. The terms are open; the facts below are not.

What is included

  • Source code of all four services — backends and frontends
  • The shared platform package: identity, billing, AI layer, encryption, design vocabulary, Atlas operations
  • Infrastructure: nginx configuration, systemd units, gunicorn settings, deploy and server-setup scripts
  • The test suites — 71 scripts, 2,379 checks
  • Documentation: build contracts, theming and internationalisation notes, subscriptions, deployment and DNS guides
  • The Vespera brand, the four service marks and the vspera.me domain

Honest current status

Production-ready, running on a single server, in private beta by invitation, validated with a small circle of users.

No revenue, user numbers or customers are claimed here, because there are none to report yet.

Open to offers — let’s talk.

Request a walkthrough

Ways to work together

  1. AOutright acquisitionThe platform, code, brand and domain transfer to you, with a handover.
  2. BLicenceUse the platform or one service under licence, in your own infrastructure.
  3. CWhite-labelYour name and look on a service — the design system is token-based and the services were built to be renamed.
  4. DCo-developmentBuild a fifth service, or a vertical version of one, together.
  5. ESponsorship or pilotFund continued development, or run a pilot with your users and keep what you learn.

A first 30 days could look like this

An offer, adjusted to you — not fixed terms.

  1. Week 1Technical walkthroughA live tour of every service, the codebase, the data model and the deploy, with your engineers.
  2. Week 2Sandbox accessA private instance seeded with demo data so your team can use and break things.
  3. Weeks 3–4Handover planAgreed scope, documentation gaps closed, and a written plan for running it on your side.

Questions

Is it live?

Yes. All four services run in production at their own subdomains of vspera.me, by invitation during the private beta.

Can I see it?

Yes. Ask for a walkthrough and you will get a live demonstration and, if useful, a sandbox account with demo data.

What is the stack?

Python (Flask, SQLAlchemy, Alembic) with PostgreSQL behind each service; Next.js 15, React 19 and TypeScript in front; nginx, systemd and gunicorn on one Linux server.

How is AI handled, and what about privacy?

Each person brings their own provider and key; keys are encrypted at rest and never sent back to a browser. The platform holds no AI keys of its own by default. Gmail access is split into separate send and read permissions, and personal data is not sold or used for advertising.

Can it be white-labelled?

Yes. Colours, type and chrome are design tokens with light and dark themes, and Atlas was built with its name and look meant to be swapped in one place.

What would you need to take it over?

One Linux server (or your own cloud), PostgreSQL, a domain, a Google Cloud project for sign-in and Gmail, and optionally a Telegram bot token and a Cloudinary account. AI is per user. The deploy scripts, documentation and test suites come with it.

07 · About the builder

Ghalmi Ahmed Nour Eddine

Biomedical engineer · AI for medical imaging

Vespera was designed, built and is run by one engineer: product, backends, frontends, AI layer, infrastructure and operations.

Ghalmi Ahmed Nour Eddine is a biomedical engineer — Master 2 in Biomedical & Hospital Informatics from the Department of Biomedical Engineering, Université Abou Bekr Belkaid, Tlemcen — and was a research intern at LaTIM (INSERM UMR 1101) in Brest, working on foundation and vision-language models for retinal imaging.

He is now seeking funding for a PhD in medical-imaging AI. Acquiring, licensing or sponsoring Vespera directly supports that doctoral research — and puts a platform built with care in hands that can take it further.

Degree
Master 2, Biomedical & Hospital Informatics, 2026
University
Université Abou Bekr Belkaid, Tlemcen
Research
Research intern, LaTIM (INSERM UMR 1101), Brest
Seeking
PhD funding · medical-imaging AI

08 · Contact

Let’s talk about what Vespera could become with you.

Write directly. A walkthrough can be arranged within days, in English or French.

Answers in English or French. No price list: open to offers.