Indie TM #12: One Founder, Ten Thousand Sources, Every Tender in Romania
What we learned at our twelfth meetup, where Mihai Negrea opened the books on DataDriven
The twelfth edition tried something new: instead of three or four pitches, the whole evening went deep on a single company. Mihai Negrea is the founder, and the only employee, of DataDriven, a platform that monitors public tenders across Romania. He walked the room through all of it, from the uncle whose SEAP misery seeded the idea, through a launch nobody noticed and a 3,000 EUR monthly cloud bill, to 300 paying firms, a self-hosted OCR pipeline running on a gaming GPU, and an MCP server his customers point Claude at. Very little was off the record, which is what made it one of the densest evenings we have had.
The arc is worth stating up front, because every section below hangs off it. Twelve years as a developer at Microsoft, two of them in the US on the Bing team. Burnout in 2021, resignation, and a deliberate decision to build the next thing completely alone. A company founded in 2023 with no prior entrepreneurial experience. A first client at 19 lei per month, a long trough of 40 tiny subscriptions, and then a compounding climb: roughly 1,500 EUR in MRR in September 2025, about 27,000 lei (around 5,000 EUR) today, growing 2 to 5 percent a month, profitable for the last three. The full first-person story is in his journey; this recap focuses on what the room dug into.

Twelve years at Microsoft, then a company of one
Mihai’s founding constraint was not a market thesis, it was recovery. After the 2021 burnout he wanted, in his own words, to eliminate human contact from his working life and to build the application exactly the way he saw fit. No cofounders, no employees, no negotiated roadmap. The room has heard many origin stories by now, but rarely one where the org chart was a mental health decision, stated that plainly.
It matters because everything else about DataDriven follows from it. A company of one cannot brute-force problems with headcount, so every expensive process eventually gets automated, and every tool choice is audited by the question “can I maintain this alone at 2 a.m.?” What looks like an infrastructure story or a marketing story below is really the same story: one person substituting engineering for staff.
An uncle, six menus, and a p7s file
The product idea came from watching his uncle, a real estate appraiser working public procurement contracts, spend hours every day inside SEAP, Romania’s electronic procurement system. The interface offered six different menus where a tender relevant to his business might be filed, and the filing was inconsistent enough that he had to check all of them. Downloading the documentation meant receiving a .p7s signed file that Windows cannot open, at which point the standard industry workflow was to google “p7s open” and install whatever trialware appeared.
Mihai did what engineers do for family: wrote a script that watched for new tenders in his uncle’s domain, crawled the data in Azure, and emailed whatever appeared. The script grew into a crawler with distinct stages, site discovery, processing, extraction from unstructured text, including sites that only render inside a browser. The ambition grew with it: not one domain but all tenders in Romania, using SEAP’s APIs for the public data while capturing the large volumes of information never exposed in the HTML. Today that pipeline monitors more than 10,000 sources daily.
$100,000 of credits and a quiet launch
The company got Azure credits worth up to $150,000 through a startup program, and Mihai burned around $100,000 of them on the AI scripts doing the crawling and processing. In February 2023 he launched, put up ads, and waited for the server to crash under the stampede. The stampede never came. The first paying client arrived in April 2023, at 19 lei per month, and for a long stretch the entire business was 40 clients at that price. He spent those years on the crawler and the data, and admits he did not seriously look at marketing until 2025.
The room noted the pattern, because it recurs across our meetups: the technical founder who builds for two years and markets for two months, then wonders why the curve is flat. What saved DataDriven was that the two years produced something structurally hard to copy, which is not always true of the things we spend two years on.
Security firms, school sandwiches, and a market of 20,000
Two customer stories defined the product. A security services firm was finding tenders through a bookmark folder organized by county: every day an employee opened the town hall websites one by one to check for new listings. They became the first serious contract, at 2,000 lei per month, for complete coverage of the sites they cared about. And catering firms serving school meal programs, the old “cornul și laptele” that has since become “masă sănătoasă,” turned out to be a natural segment: catering is logistically bound to a county, you cannot deliver school sandwiches two counties away, so each firm needs every town hall in its county watched and nothing else.
The addressable market, firms that actively participate in Romanian public tenders, is roughly 20,000 companies. That number shaped everything about go-to-market: it is far too small for consumer-style growth, and exactly the right size for a lead list assembled from public data.
Reading the documents nobody reads
The technical heart of the talk was a decision most competitors have not made: DataDriven reads the actual tender documentation, the PDFs and the scans, rather than trusting titles and descriptions. The official CPV classification has around 10,000 subcategories and is misapplied constantly; Mihai has found food accessories filed under laptops. So he built his own taxonomy of about 180 categories, deliberately down-to-earth, modeled on how Romanian companies actually describe their work, and classifies from document content. That is what allows the platform to say “this caiet de sarcini asks for exactly these products” instead of the generic “medical equipment.”
Reading every document requires industrial OCR, and this is where the solo-founder economics got interesting. The pipeline started on Azure Document Intelligence and now runs on Tesseract plus his own classifiers that validate output quality, executing on an RTX 3090 with 24GB of VRAM in his office at around 1,500 pages per hour. The office has solar panels that cover both the machine and its cooling, so marginal energy cost is effectively zero. The same GPU capacity rented in the cloud would be prohibitive at his volumes.
DataDriven needs industrial OCR, every tender document in Romania, scans included, and cloud pricing made that a luxury: Azure Document Intelligence billed per page, and GPU instances rent at rates designed for venture budgets. Mihai’s replacement is a single RTX 3090 in his office running Tesseract plus his own quality-validation classifiers, processing about 1,500 pages per hour, powered by the solar panels on the roof, so the marginal cost per page is approximately zero. A consumer GPU is not a data center, but a solo founder’s workload rarely needs one; it needs sustained, predictable throughput on a task that tolerates batch processing. When an AI API is your biggest variable cost, price out the unfashionable alternative of one good machine you own, because the payback period is often measured in weeks.
Ads for branding, cold email for customers
Google Ads was the first channel, and Mihai now files it under branding, not acquisition. The conversion problem was structural: someone searches for construction work, clicks the ad, lands on the platform, and turns out not to meet the eligibility requirements that public tenders impose, revenue thresholds, employee counts, certifications. No ad platform can target on “eligible to sell to the Romanian state.” Facebook Ads came up in discussion, strong targeting, easy distribution through groups, deep penetration in Romania, but nobody in the room could vouch for it in B2B, and Mihai remains unconvinced.
Google Ads sent DataDriven a steady stream of visitors who could never become customers: they searched for construction tenders, clicked, and only then discovered that public procurement demands revenue thresholds, staff counts, and certifications they did not have. The ad platform had no way to target eligibility, so the budget bought branding at best and noise at worst. This failure mode generalizes to every market where the buyer must hold a license, a certification, or a track record: regulated industries, government suppliers, professional services. In those markets the qualifying attribute is invisible to ad targeting but often visible in public registries, which is where the marketing budget should go instead. Before spending on ads, ask whether a click can even in principle identify your qualified buyer; if not, the channel is structurally wrong regardless of how well you run it.
What replaced ads is a cold email operation built on SEAP’s own public data: who participates in tenders, who wins them, phone numbers, activity domains. A firm’s procurement history is the qualification ads could not check. The sending infrastructure runs on Instantly.ai at about $150 per month, plus roughly $5 per address for Google Workspace: multiple addresses across several domains, automatically warmed up by the platform sending, opening, replying to, and clicking messages between its own accounts to train sender reputation. Throughput is limited by design, and open rates hold up. Attribution, he admitted, is a mess: people see the email, later google the product, and arrive through the ad, so no dashboard cleanly says which channel closed them.
Mihai’s cold email machine is mostly plumbing: multiple sending addresses spread across several domains, each warmed up automatically by Instantly.ai, which has the accounts send, open, reply to, and click each other’s messages until mailbox providers trust them. The whole fleet costs about $150 per month plus $5 per Google Workspace address, and throughput stays deliberately limited to protect deliverability. The insight indie hackers miss is the ordering: before subject lines and personalization matter at all, the message has to land in an inbox, and that is determined by sender reputation built over weeks. Blasting from your main domain both fails and burns the domain your business runs on. Treat cold email like infrastructure, warmed domains you can afford to lose, low volume, patience, and only then start optimizing the words.
Leaving Azure without burning the boats
When the sponsorship credits ran out, the bill landed at 2,500 to 3,000 EUR per month across Azure Search, Cosmos DB, OpenAI, and storage, against roughly 1,500 EUR of MRR at the time. The exit, told in full in his journey, ran piece by piece: Cosmos DB to MongoDB in two or three days using a Claude-built query translation layer running in parallel until automated validation confirmed parity; Azure Search, about $500 per 16GB instance and two instances for availability, to self-hosted Elasticsearch; storage to Hetzner’s S3-compatible object store after egress and ingress charges, including one 700 EUR ingress month, revealed what shuttling documentation in and out of Azure really cost. The target is three dedicated Hetzner servers, Elasticsearch, MongoDB, and web, plus temporary cloud instances on demand. Last month’s Azure bill: $1,500 and falling.
What kept the room’s attention was that the exit is not absolutist. When the office infrastructure has downtime, backend tasks overflow to Azure Batch Low Priority instances for a few hours at moderate hourly cost. For network resilience he is considering a Starlink fallback. The GPU sits in an office, not a data center, and he has engineered around that honestly rather than pretending it is one.
DataDriven’s infrastructure now lives on Hetzner dedicated servers and an office GPU, but Mihai kept an escape hatch in the other direction: when his local hardware has downtime, backend tasks overflow to Azure Batch Low Priority instances for a few hours at modest cost, and a Starlink connection is under consideration as network fallback. That design is what makes self-hosting responsible instead of reckless for a company of one. The cloud’s real product was never compute, it was the promise that failures are someone else’s pager, and when you take that back you must replace it with something: an overflow path, a degraded mode, a documented recovery. Price the fallback into the migration math from the start, because the savings of leaving the cloud are only real if one hardware failure cannot take the product down for a week.
The numbers, and the invoice-first economy
Mihai shared the finances without hedging. Over 300 paying firms. MRR around 27,000 lei, approximately 5,000 EUR, up from roughly 1,500 EUR in September 2025. About 40,000 EUR in total revenue last year. Growth of 2 to 5 percent per month, which he described as slow and steady rather than apologizing for it. Profitable on paper for about three months, with minimal salaries for himself and his wife, and a Romanian accounting lesson attached: you cannot repay the money you personally lent your own company, or pay dividends, until the balance sheet turns positive. His own cash, locked until the books say otherwise.
Pricing is fully public, no “contact us,” topping out at 290 lei per month on a plan that recently gained API access and an MCP server. That premium tier collected 3 or 4 subscribers in its first month, which at this scale he counts as a win. The harder conversation was churn, which is high and mostly transactional rather than product-driven: cards without funds, forgotten payments, subscriptions that lapse by accident. Romanian B2B customers want direct contact, want the fiscal invoice, and are wary of automatic card billing, even though the platform only invoices after explicit confirmation and payment. The cost of that culture is operational: reminders, follow-ups, and a certain amount of phone time that a pure SaaS playbook never budgets for.
DataDriven’s churn is high, and almost none of it means the product failed: cards run out of funds, payments get forgotten, and firms that fully intend to continue simply lapse. Romanian B2B buyers want the fiscal invoice before money moves, prefer direct human contact, and distrust automatic card billing on principle, so the frictionless self-serve subscription that SaaS playbooks assume does not exist here. Mihai’s response is to treat payment recovery as a standing operational process, reminders, follow-up calls, re-onboarding, rather than reading every lapse as a verdict on the product. The lesson for anyone selling outside the Silicon Valley payment bubble is to learn how your market actually pays before designing the billing, and to budget real recurring effort for collection. A lapsed card in an invoice-first culture is a to-do item, not a goodbye.
Success-fee pricing came up from the audience, pay a percentage when you win the tender. Mihai has thought about it and keeps refusing, because the money in question is public money, and a platform taking a percentage of public contract values is a position he does not want to occupy, legally or reputationally. What he might build instead is a subscription that includes a number of assisted tenders plus a fixed, non-percentage fee on success, outcome-based but not proportional. No commitment yet, and he was careful to say so.
Customers keep offering Mihai a seductive model: charge nothing up front, take a percentage when the tender is won. He refuses, and his reasoning is worth copying. The contract values are public money, and a private platform skimming a percentage of state contracts invites legal scrutiny, reputational damage, and misaligned incentives to push clients toward the biggest tenders rather than the right ones. If he ever prices on outcomes it will be a fixed fee per successful assisted tender bundled into a subscription, never a percentage. The general discipline is to stress-test a revenue model against the source of the money and the behavior it rewards, not just against revenue potential, and to be able to articulate exactly why you turned down the model everyone suggests. A pricing structure is a position you have to defend for years.
Onboarding, trainings, and thirty interviews
The customer development story drew as many questions as the infrastructure. Mihai has scheduled around 30 customer interviews, of which 10 to 12 actually showed up, and his script avoids the question founders love: not “what features do you want?” but “what do you do? walk me through it, how long does it take, who is involved.” Workflow, time, people. The feature list falls out of that on its own.
Onboarding asks for a minimum of 30 characters describing the tenders you care about; AI converts the text into monitoring criteria so the first login shows relevant tenders immediately. Behavior then tunes the filters, thumbs up and down, saves, navigation patterns, with changes reviewed to avoid surprises. Some users resist, “let me just see the app,” and some expect to be phoned and configured, both of which he absorbs: two open training sessions per week, a free short setup meeting for anyone who wants one, and scheduled emails on days 1, 2, 5, and 10 with practical suggestions, instead of a first-time product tour he considers intrusive and skippable. He named the trade-off directly: his time goes into the product and these conversations, and the analytics stack sits mostly unconfigured, a choice, not an oversight.
Of the thirty or so customer interviews Mihai scheduled, ten to twelve happened, and in every one he refuses the founder’s favorite question. He never asks what features people want; he asks what they do: walk me through the process, how many hours does it take, who on the team touches it. Feature requests are guesses filtered through what the customer imagines software can do, while workflow descriptions are facts, and the product opportunities sit visibly inside them, the daily bookmark-folder patrol, the hours lost to six SEAP menus. The show-up rate is also part of the lesson: schedule three times the interviews you need, because most will evaporate. Treat customer conversations as ethnography rather than requirements gathering, and the roadmap writes itself from the pain you observed instead of the wishlist you collected.
MCP packs and an agent that files the paperwork
The forward-looking section was the most technical of the night. Tender documentation, once OCRed, gets rebuilt into what Mihai serves through MCP, the Model Context Protocol that lets tools plug directly into Claude, ChatGPT, and other assistants: cleaned markdown versions of each document with semantic search and an explicit structure, table of contents, chapter and subchapter levels. He deliberately avoids leaning on embeddings alone; retrieval is guided through the document’s own hierarchy first, table of contents navigation plus targeted lookups, an approach currently gaining ground in RAG circles. His customers already use Claude and GPT at work, so the MCP server means their assistant reads the tender the way a careful human would, at lower token cost and higher accuracy than dumping raw PDFs into a context window. Firms that would otherwise have to build OCR and retrieval in-house get it as a plan feature; he called it a no-brainer, and the first premium subscribers seem to agree.
DataDriven serves tender documentation to AI assistants as structured markdown with an explicit table of contents and chapter hierarchy, and retrieval walks that structure first, using semantic search as a supplement rather than the foundation. Mihai distrusts embeddings-only RAG for long official documents, where a naive similarity search returns fragments stripped of the context that gives them legal meaning. Guided navigation, find the right chapter, then read it properly, mirrors how a careful human reads a contract, costs fewer tokens, and fails more predictably. The broader point for anyone building on LLMs is that documents already contain an information architecture, headings, sections, numbering, and throwing it away to chunk-and-embed is destroying signal you paid to OCR. Preserve structure, navigate it explicitly, and reserve embeddings for the queries structure cannot answer.
Beyond MCP sits the real ambition: an end-to-end agent for tender participation. The user declares the tender they want, their products, certifications, and company data, and the agent prepares the complete submission documentation. And beyond that, a civic idea the room liked: the same dataset exposes patterns worth journalistic attention, firms that always finish second, pairs of companies bidding in tandem at the same authority, correlations across winners. A transparency tool for journalists is on the someday list.
Copycats, Hermix, and Europe
The competitive map, as Mihai drew it: Romanian incumbents run 2010-era interfaces on top of the official CPV codes, inheriting every classification error. A European competitor, Hermix, reports 500 to 600 thousand EUR ARR with a team of 14 and a heavy sales focus; a “join forces” conversation went nowhere, because their center of gravity is sales and his is technology. And a wave of Romanian copycats now claims “AI agents for tenders,” most of them, in his assessment, GPT wrappers with no data underneath. He is calm about all of it: the moat is the coverage, the crawler, the OCR pipeline, the taxonomy, the retrieval stack, and the fact that one person with that stack can move faster than a fourteen-person sales organization.
Europe is already underway: crawling runs on more than 60 procurement portals, state and private, with Germany alone fragmenting into per-land portals plus private ones. The current version translates titles and descriptions into Romanian and targets Romanian firms bidding abroad; full per-country expansion is an architectural project he is pacing deliberately, automation and maintainable scale before flags on the landing page.
When Romanian copycats started advertising “AI agents for public tenders,” Mihai did not panic, because he could see what they actually shipped: a GPT wrapper over the same misclassified official data everyone can access. What they cannot clone from his landing page is the part that took years, a crawler covering ten thousand sources, an OCR pipeline reading every document, a hand-built taxonomy, and a retrieval stack that makes the data usable. Even the funded European competitor with fourteen people concentrates on sales rather than technology, which is precisely why he declined to join forces. The reassurance for any founder watching lookalikes appear is that marketing copy is the only layer that copies cheaply; if your advantage lives in accumulated data and infrastructure, every copycat validates the market while inheriting none of the moat. Fear the competitor who rebuilds your pipeline, not the one who rewrites your homepage.
Twelve editions in
The single-story format worked because the story had everything our meetups keep circling: the burnout that reset the ambition, the two years of building before anyone paid attention, the customer whose bookmark folder was the real spec, the cloud bill that nearly outran revenue, and the slow, compounding 2 to 5 percent months that never make it into launch threads. What made it land was the completeness. We usually see the demo; this time we saw the cost structure, the churn, the locked dividends, and the reasoning behind every refusal, of cofounders, of success fees, of the funded competitor’s merger offer.
If there was one sentence to take home, it was the shape of the whole thing: find the workflow so painful that someone pays a hundred times your list price to be rid of it, read the source documents everyone else skims, own the expensive parts of your stack, and be patient enough to let three years of compounding do what a launch week cannot. See you at the thirteenth.
Advice from this event
A gaming GPU on solar power can replace a cloud AI service
DataDriven needs industrial OCR, every tender document in Romania, scans included, and cloud pricing made that a luxury: Azure Document Intelligence billed per page, and GPU instances rent at rates designed for venture budgets. Mihai's replacement is a single RTX 3090 in his office running Tesseract plus his own quality-validation classifiers, processing about 1,500 pages per hour, powered by the solar panels on the roof, so the marginal cost per page is approximately zero. A consumer GPU is not a data center, but a solo founder's workload rarely needs one; it needs sustained, predictable throughput on a task that tolerates batch processing. When an AI API is your biggest variable cost, price out the unfashionable alternative of one good machine you own, because the payback period is often measured in weeks.
Paid ads fail when your buyer must meet requirements a click cannot check
Google Ads sent DataDriven a steady stream of visitors who could never become customers: they searched for construction tenders, clicked, and only then discovered that public procurement demands revenue thresholds, staff counts, and certifications they did not have. The ad platform had no way to target eligibility, so the budget bought branding at best and noise at worst. This failure mode generalizes to every market where the buyer must hold a license, a certification, or a track record: regulated industries, government suppliers, professional services. In those markets the qualifying attribute is invisible to ad targeting but often visible in public registries, which is where the marketing budget should go instead. Before spending on ads, ask whether a click can even in principle identify your qualified buyer; if not, the channel is structurally wrong regardless of how well you run it.
Cold email at scale is an infrastructure problem before it is a copywriting problem
Mihai's cold email machine is mostly plumbing: multiple sending addresses spread across several domains, each warmed up automatically by Instantly.ai, which has the accounts send, open, reply to, and click each other's messages until mailbox providers trust them. The whole fleet costs about $150 per month plus $5 per Google Workspace address, and throughput stays deliberately limited to protect deliverability. The insight indie hackers miss is the ordering: before subject lines and personalization matter at all, the message has to land in an inbox, and that is determined by sender reputation built over weeks. Blasting from your main domain both fails and burns the domain your business runs on. Treat cold email like infrastructure, warmed domains you can afford to lose, low volume, patience, and only then start optimizing the words.
Leave the cloud with a fallback, not a farewell
DataDriven's infrastructure now lives on Hetzner dedicated servers and an office GPU, but Mihai kept an escape hatch in the other direction: when his local hardware has downtime, backend tasks overflow to Azure Batch Low Priority instances for a few hours at modest cost, and a Starlink connection is under consideration as network fallback. That design is what makes self-hosting responsible instead of reckless for a company of one. The cloud's real product was never compute, it was the promise that failures are someone else's pager, and when you take that back you must replace it with something: an overflow path, a degraded mode, a documented recovery. Price the fallback into the migration math from the start, because the savings of leaving the cloud are only real if one hardware failure cannot take the product down for a week.
In invoice-first markets, churn is operational, not emotional
DataDriven's churn is high, and almost none of it means the product failed: cards run out of funds, payments get forgotten, and firms that fully intend to continue simply lapse. Romanian B2B buyers want the fiscal invoice before money moves, prefer direct human contact, and distrust automatic card billing on principle, so the frictionless self-serve subscription that SaaS playbooks assume does not exist here. Mihai's response is to treat payment recovery as a standing operational process, reminders, follow-up calls, re-onboarding, rather than reading every lapse as a verdict on the product. The lesson for anyone selling outside the Silicon Valley payment bubble is to learn how your market actually pays before designing the billing, and to budget real recurring effort for collection. A lapsed card in an invoice-first culture is a to-do item, not a goodbye.
Some revenue models are traps: know why you refuse a success fee
Customers keep offering Mihai a seductive model: charge nothing up front, take a percentage when the tender is won. He refuses, and his reasoning is worth copying. The contract values are public money, and a private platform skimming a percentage of state contracts invites legal scrutiny, reputational damage, and misaligned incentives to push clients toward the biggest tenders rather than the right ones. If he ever prices on outcomes it will be a fixed fee per successful assisted tender bundled into a subscription, never a percentage. The general discipline is to stress-test a revenue model against the source of the money and the behavior it rewards, not just against revenue potential, and to be able to articulate exactly why you turned down the model everyone suggests. A pricing structure is a position you have to defend for years.
Interview customers about their workflow, never their wishlist
Of the thirty or so customer interviews Mihai scheduled, ten to twelve happened, and in every one he refuses the founder's favorite question. He never asks what features people want; he asks what they do: walk me through the process, how many hours does it take, who on the team touches it. Feature requests are guesses filtered through what the customer imagines software can do, while workflow descriptions are facts, and the product opportunities sit visibly inside them, the daily bookmark-folder patrol, the hours lost to six SEAP menus. The show-up rate is also part of the lesson: schedule three times the interviews you need, because most will evaporate. Treat customer conversations as ethnography rather than requirements gathering, and the roadmap writes itself from the pain you observed instead of the wishlist you collected.
Give an LLM the table of contents before you give it embeddings
DataDriven serves tender documentation to AI assistants as structured markdown with an explicit table of contents and chapter hierarchy, and retrieval walks that structure first, using semantic search as a supplement rather than the foundation. Mihai distrusts embeddings-only RAG for long official documents, where a naive similarity search returns fragments stripped of the context that gives them legal meaning. Guided navigation, find the right chapter, then read it properly, mirrors how a careful human reads a contract, costs fewer tokens, and fails more predictably. The broader point for anyone building on LLMs is that documents already contain an information architecture, headings, sections, numbering, and throwing it away to chunk-and-embed is destroying signal you paid to OCR. Preserve structure, navigate it explicitly, and reserve embeddings for the queries structure cannot answer.
Copycats clone your pitch, not your pipeline
When Romanian copycats started advertising "AI agents for public tenders," Mihai did not panic, because he could see what they actually shipped: a GPT wrapper over the same misclassified official data everyone can access. What they cannot clone from his landing page is the part that took years, a crawler covering ten thousand sources, an OCR pipeline reading every document, a hand-built taxonomy, and a retrieval stack that makes the data usable. Even the funded European competitor with fourteen people concentrates on sales rather than technology, which is precisely why he declined to join forces. The reassurance for any founder watching lookalikes appear is that marketing copy is the only layer that copies cheaply; if your advantage lives in accumulated data and infrastructure, every copycat validates the market while inheriting none of the moat. Fear the competitor who rebuilds your pipeline, not the one who rewrites your homepage.
Join the next meetup
We meet regularly in Timisoara to share what we're building, swap tactics, and roast each other's products. Everyone is welcome.
Join us on Luma