Files
vreau-digital/PLAN-OPENSOURCE.md
Claude VM a6c03a091e initial: split from gov-agreg — vreau.digital standalone platform
Moved from gov-agreg/src/pages/achizitii/* to root (drop prefix).
- 22 pages migrated, 127 files total
- All internal links: /achizitii/X → /X (176 occurrences fixed)
- AchizitiiLayout subnav rewritten: /X paths, top-right link to vreaudigital.ro hub
- BaseLayout new (vreau.digital branding, OG tags, site URL)
- astro.config.mjs: site https://vreau.digital, server output (was static)
- docker-compose: port 5096 (vreaudigital is 5095), container vreau-digital
- deploy.sh: paths /opt/vreau-digital, log /var/log/vreau-digital-deploy.log

Backend shared with gov-agreg:
- PostgreSQL satra (same schemas: seap, firms, anaf, anre, ...)
- Photon, Martin tiles
- Infisical /vreaudigital path (DATABASE_URL etc. shared)

build: PASS (npx astro check 0 errors, npm run build 5s vite + 10s server)
2026-05-13 00:10:32 +03:00

522 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PLAN-OPENSOURCE.md — Strategia de Lansare Open-Source
# vreaudigital.ro / gov-agreg
**Data:** 7 aprilie 2026
**Autor:** Marius + Claude
**Status:** Draft — planificare pre-lansare
---
## Context și filozofie
Strategia e simplă: construim în privat pe Gitea până avem ceva de care nu ne e rușine, apoi lansăm public pe GitHub cu un bang, nu un whimper. Nu lansăm "early" ca să primim feedback că site-ul e gol. Lansăm când avem cel puțin 3 demo-uri funcționale și un design care inspiră.
**Principiu fundamental:** Prima impresie pe GitHub/HackerNews e greutatea aurului. Nu pierdem acea impresie pe un repo cu un README gol și un commit "initial setup".
---
## 1. Checklist pre-lansare
### Codul și structura
- [ ] Site-ul e live pe vreaudigital.ro (nu doar local sau pe un subdomain de test)
- [ ] Build trece fără erori și fără warning-uri critice (`astro build` clean)
- [ ] Niciun secret, token sau credențial în git history (verifică cu `git log --all -p | grep -i "token\|secret\|key\|password"`)
- [ ] `.gitignore` corect — fără `.env`, fără `node_modules/`, fără fișiere de editor (`.DS_Store`, `.idea/`)
- [ ] Commit history curat — dacă history-ul de pe Gitea conține mesaje interne jenante sau experimente, faci un fresh repo pe GitHub (nu mirror)
### Documentație minimă obligatorie
**README.md** — cel mai important fișier, citit de toți:
- [ ] Ce e proiectul (2-3 propoziții, în română și engleză — da, excepție de la regula "doar română" pentru README)
- [ ] Screenshot sau GIF animat al site-ului în README (obligatoriu — repo-urile fără imagini au CTR mizerabil)
- [ ] Link spre site-ul live (primul lucru)
- [ ] Cum rulezi local (maxim 4 comenzi: clone, npm install, npm run dev)
- [ ] Cum contribui (link spre CONTRIBUTING.md)
- [ ] Licența
**CONTRIBUTING.md:**
- [ ] Cum adaugi un produs nou (flow-ul cu fișierul MDX)
- [ ] Cum raportezi o problemă
- [ ] Convenție de commit messages (simplu: `feat:`, `fix:`, `content:`)
- [ ] Ce nu acceptăm (produse proprietare fără demo live, produse fără legătură cu administrația publică)
**LICENSE:**
- [ ] MIT pentru codul platformei
- [ ] Notă separată: conținutul (produsele listate) aparține autorilor lor
**CODE_OF_CONDUCT.md:**
- [ ] Folosești Contributor Covenant 2.1 (copy-paste standard, traducere în română)
- [ ] Contact pentru raportare abuzuri (un email dedicat, ex: conduct@vreaudigital.ro)
### Issue templates (`.github/ISSUE_TEMPLATE/`)
Trei template-uri, nu mai multe:
**1. `product-submission.md`** — pentru cei care vor să listeze un produs:
```
Nume produs:
URL (live sau demo):
Categorie:
Screenshot/video (link):
Descriere scurtă (2 propoziții):
Unde funcționează deja? (opțional):
```
**2. `bug-report.md`** — standard, minimal:
```
Ce ai încercat să faci:
Ce s-a întâmplat:
Ce te așteptai să se întâmple:
Browser/OS:
```
**3. `improvement.md`** — propuneri de îmbunătățire a platformei
### PR template (`.github/pull_request_template.md`)
```markdown
## Ce face acest PR
## Tip de schimbare
- [ ] Produs nou adăugat
- [ ] Fix conținut existent
- [ ] Îmbunătățire platformă
- [ ] Altele
## Checklist
- [ ] Am rulat `npm run build` local și trece fără erori
- [ ] Screenshot-urile sunt actualizate (dacă e cazul)
- [ ] Nu am adăugat dependențe noi fără motiv
```
### CI/CD minimal
**Nu avem nevoie de ceva complex.** Două GitHub Actions:
**1. Build check** (la orice PR):
```yaml
# .github/workflows/build.yml
# Rulează: npm ci && npm run build
# Fail dacă build-ul pică
```
**2. Deploy automat** (la merge în main):
```yaml
# .github/workflows/deploy.yml
# Cloudflare Pages are GitHub integration nativă — probabil nici nu ai nevoie de Action manual
# Dacă folosești Cloudflare Pages GitHub integration, deploy-ul e automat out of the box
```
**Ce NU adăugăm la CI:** linting strict, type-check cu erori blocante, teste (nu avem), dependency scanning (overkill). Adăugăm când/dacă repo-ul are contributori activi și merită.
---
## 2. Unde lansăm
### GitHub — da, GitHub, nu Gitea
**De ce GitHub și nu Gitea public:**
- Descoperabilitate zero pe Gitea dacă nu știi exact URL-ul
- Stars, forks, trending — GitHub are efect de rețea
- GitHub Discussions, Issues, Actions sunt așteptate de contributori
- "Contribute on Gitea" e o barieră în plus pentru oricine vrea să ajute
**Gitea rămâne ca:**
- Mirror privat / backup (setup automat push mirror)
- Development intern dacă vrei să lucrezi "în privat" înainte de push
- Istoric — nu șterge repo-ul, dar GitHub devine primary
### Nume organizație GitHub
Recomandări în ordinea preferinței:
1. **`vreaudigital`** — dacă domeniul e al nostru, organizația trebuie să fie la fel
2. **`gov-agreg`** — merge ca repo name, nu ca org name (prea tehnic)
3. **`digitalizare-ro`** — alternativă dacă vreaudigital e luat
**Decizie recomandată:** Creezi organizația `vreaudigital` pe GitHub, cu repo-ul principal `vreaudigital.ro` (sau `platform`). Organizația lasă loc pentru repo-uri separate ulterior.
### Structura repo-urilor — monorepo, cel puțin la start
**Monorepo `vreaudigital/platform`** conține:
```
/ ← codul Astro al platformei
/src/products/ ← un fișier .mdx per produs listat
/src/pages/ ← paginile site-ului
/public/ ← assets statice
/.github/ ← templates, actions
```
**Repo-uri separate (mai târziu, nu acum):**
- `vreaudigital/traducator-birocratic` — dacă demo-ul birocratic devine tool separat cu UI propriu
- `vreaudigital/harta-digitalizarii` — idem
- `vreaudigital/date` — eventual, date curate despre servicii publice
**Nu face multi-repo de la start** — overhead de management fără beneficiu real la dimensiunea actuală.
---
## 3. Criterii de lansare — ce declanșează "go public"
Nu lansăm după un calendar fix. Lansăm când sunt îndeplinite toate criteriile din categoria A și cel puțin 2 din categoria B.
### Categoria A — Obligatorii (toate trebuie bifate)
- [ ] **Site live** pe vreaudigital.ro, accesibil public, fără erori evidente
- [ ] **Minim 5 produse listate** cu pagini complete (screenshot + descriere + link funcțional)
- [ ] **Minim 1 demo funcțional** (nu link extern, ci ceva ce rulează pe domeniul nostru sau demo interactiv embeded)
- [ ] **Design decent** — hero section cu mesaj clar, categorii vizuale, mobile-friendly
- [ ] **README cu screenshot** — cineva care vede repo-ul pe GitHub înțelege imediat ce e
- [ ] **Niciun secret în git** — verificat explicit
### Categoria B — Cel puțin 2 din 4
- [ ] **Traducătorul birocratic funcțional** — cel mai viral produs, dacă îl avem la lansare crește reach-ul masiv
- [ ] **Pagina "Listează-ți produsul"** funcțională (formularul trimite cererea undeva — email sau GitHub Issue)
- [ ] **Minim 3 categorii populate** cu cel puțin 2 produse fiecare
- [ ] **Analytics setup** (Plausible sau Umami) ca să știm dacă oamenii intră
### Ce nu contează pentru timing
- Câte stele are repo-ul (zero la lansare, normal)
- Dacă CONTRIBUTING.md e perfect
- Dacă am răspuns la toate issue-urile (nu există încă)
- Dacă instituțiile știu de noi
---
## 4. Campania de lansare
### Cu o zi înainte — pregătire
- [ ] Draft-urile postărilor sunt scrise și revizuite
- [ ] Screenshot-uri proaspete ale site-ului (nu din beta)
- [ ] GIF animat de 5-10 secunde care arată ce face traducătorul birocratic (tool: LICEcap sau screen2gif)
- [ ] Link-urile scurtate (nu e.g. `github.com/vreaudigital/platform/blob/main/src/...`)
- [ ] Repo-ul GitHub e public (verifică că nu e private)
- [ ] GitHub Discussions activat
### Ziua lansării — ordinea contează
**Dimineața (8-9 AM):**
1. Postare pe HackerNews "Show HN" — postezi tu primul, traficul vine repede dacă prinde
2. Postare pe r/Romania
**Mijlocul zilei (12-14):**
3. Thread pe Twitter/X
4. Post pe LinkedIn (pentru developeri și oameni din tech)
**Seara (18-20):**
5. Facebook — grupurile dev românești (cel mai activ trafic seara)
6. Răspunzi la toate comentariile de peste zi
**Nu posta simultan pe toate canalele** — primești feedback pe unul și poți ajusta mesajul pentru următorul.
### Unde postezi
| Canal | Tip conținut | Ton | Așteptări |
|-------|-------------|-----|-----------|
| **HackerNews** `Show HN:` | Titlu concis, link, scurt context în comentariu | Tehnic, direct | 50-500 upvotes dacă prinde. Trafic calitativ. |
| **r/Romania** | Post cu imagine + text | Emoțional, cetățean | 100-1000 upvotes dacă e share-abil. Audiență mare. |
| **r/opensource** | Post tehnic cu README link | Tehnic, comunitate | Nișat, trafic mic dar relevant |
| **Twitter/X** | Thread 5-7 tweet-uri | Vizual, hashtags | #Romania #civic #digitalizare #opensource |
| **LinkedIn** | Post cu screenshot | Profesional, impact social | Tag developeri și oameni din gov tech |
| **Facebook — Developeri Romania** | Post cu GIF + link | Informal, direct | Grupul cel mai activ din RO pentru dev |
| **Facebook — Civic tech / ONG** | Post axat pe cetățeni | Emoțional, "de ce contează" | Audiență non-tech, share potențial |
### Template post HackerNews
```
Show HN: vreaudigital.ro open-source hub for Romanian civic tech
[URL: https://vreaudigital.ro]
Romania's public administration still runs on PDF forms, phone queues,
and websites from 2005. We built an open-source catalog of tools that
show what's actually possible.
Not enterprise software — demos that work in a browser, in 30 seconds.
Built by independent developers, for citizens and municipalities.
Current highlights:
- Birocratic Translator: paste any official text, get plain-language explanation
- Digitalization Map: interactive map of which Romanian cities have online services
- Budget Visualizer: where do your local taxes actually go?
Stack: Astro + Tailwind + Markdown, deployed on Cloudflare Pages.
Zero database, zero backend, zero cost to run.
Looking for Romanian civic tech projects to list. If you've built something
in this space, open an issue.
```
### Template post r/Romania
```
Am construit vreaudigital.ro — un catalog de soluții de digitalizare reală
[screenshot/GIF]
Toată lumea se plânge că România digitală = formulare PDF online și site-uri din 2005.
Am decis să arătăm cum ar putea fi altfel.
vreaudigital.ro e un catalog open-source de tools și demo-uri construite de
programatori independenți, care arată ce e posibil când te gândești la cetățean,
nu la birocrație.
**Ce găsești acum:**
- Traducătorul birocratic — lipești orice text oficial, primești explicația pe înțelesul tău
- Harta digitalizării — cât de "online" e primăria ta față de celelalte
- Vizualizare buget local — pe ce se duc banii din taxele tale, în grafice
Toate sunt demo-uri reale, nu slide-uri.
Suntem open-source: [link GitHub]
Dacă ai construit ceva similar sau vrei să contribui, bine ai venit.
Ce digitalizare vreți voi să existe și nu există? (Luăm sugestii serios.)
```
### Template thread Twitter/X
```
Tweet 1:
România digitală = formulare PDF, cozi la ghișeu, site-uri din 2005.
Noi arătăm cum ar putea fi altfel.
Lansăm vreaudigital.ro — un hub open-source de digitalizare reală 🧵
[screenshot site]
Tweet 2:
Nu e un alt portal guvernamental.
E un catalog de demo-uri construite de programatori independenți.
Fiecare produs răspunde la: "ce s-ar schimba în viața ta dacă asta ar exista la primăria ta?"
Tweet 3:
Primul demo: Traducătorul Birocratic 🏛️
Lipești orice text oficial → primești explicația pe românește
[GIF demo]
Tweet 4:
Al doilea: Harta Digitalizării 🗺️
Care primării au servicii online? Care sunt în 2005?
Date crowdsourced, actualizate de comunitate.
Tweet 5:
Open-source, zero buget instituțional, construit în weekenduri.
Stack: Astro + Tailwind + Cloudflare Pages.
Vrei să-ți listezi proiectul? Trimite un issue:
[link GitHub]
Tweet 6:
#Romania #CivicTech #OpenSource #Digitalizare
Dacă știi un programator care a construit ceva util pentru administrație —
tag-uiți-l. Vrem să-i dăm vizibilitate.
```
### Cine să contactezi direct (outreach personalizat)
**Tech influenceri și comunități românești:**
- Comunitatea React România (Facebook group, ~30k membri)
- Developeri Romania (Facebook group)
- Cluj.rb, JSHeroes, TechHub Cluj — comunități locale cu reach
- Blogeri tech RO: cautăm oameni care au scris despre civic tech, gov tech, sau critica digitalizării
**Jurnaliști relevanti:**
- Recorder.ro — investigații, ar fi interesați de harta digitalizării
- PressOne — tech și societate
- Libertatea — rubrica "România funcțională" sau similare
- G4Media — dacă harta sau bugetele devin știre
**Nu spam blast — mesaj personalizat pentru fiecare:**
```
Bună [Nume],
Am văzut că ai scris/ai vorbit despre [subiect relevant].
Tocmai am lansat vreaudigital.ro — un catalog open-source de soluții de digitalizare
pentru administrația publică din România.
[Un lucru specific de pe site relevant pentru ei]
Dacă crezi că e relevant pentru audiența ta, m-ar bucura să știu.
Nu e un comunicat de presă — e un proiect mic construit de 1-2 oameni.
[Marius]
```
---
## 5. Community management post-lansare
### Primele 48 de ore — totul contează
- Răspunde la **orice** comentariu, issue, sau mesaj în primele 48h
- Nu lăsa nicio întrebare fără răspuns, oricât de banală
- Dacă cineva raportează un bug real, fix-ul în sub 24h și reply cu "fixed, merci"
- Dacă cineva propune ceva bun, deschide un issue ca să nu se piardă
### Gestionarea primilor contributori
**Primul contributor e cel mai important.** Tratează-l ca un client VIP:
1. **Ghidare activă** — dacă deschid un PR care e aproape bun dar nu perfect, nu-l rejecta, ajută-i să-l corecteze
2. **Merge rapid** — dacă e ok, merge-uiești în 24-48h, nu în 2 săptămâni
3. **Credit public** — menționezi pe Twitter/LinkedIn: "Primul contributor extern: [nume] a adăugat [ce a adăugat]"
4. **Invitație în echipă** — după 2-3 contribuții serioase, îl faci collaborator pe repo
**Ce faci cu submisiile de produse (Issues):**
- Review în maxim 72h (nu 2 săptămâni)
- Template de răspuns dacă lipsesc informații:
```
Mulțumim pentru submisie!
Ca să putem lista produsul, avem nevoie de:
- [ ] Screenshot sau video demo (minim 30 de secunde)
- [ ] Link live sau demo funcțional
Revenim imediat ce le ai.
```
- Dacă produsul nu se califică, explici clar de ce (nu un "nu se potrivește" vag)
### Strategia de labels pe issues
Minimal și funcțional — nu inventa 20 de labels:
| Label | Culoare | Când îl folosești |
|-------|---------|------------------|
| `good-first-issue` | Verde deschis | Fix de typo, adăugat un produs cu template gata, fix CSS simplu |
| `help-wanted` | Galben | Funcționalitate pe care noi nu avem timp s-o facem dar e clară |
| `product-submission` | Albastru | Oricine trimite un produs nou |
| `bug` | Roșu | Ceva e stricat |
| `enhancement` | Mov | Idee de îmbunătățire confirmată |
| `wontfix` | Gri | Respins cu explicație |
| `stale` | Gri deschis | Issue inactiv 30+ zile (opțional, nu e urgent) |
**Nu adăuga** labels de prioritate (P0/P1/P2) sau de component (frontend/backend) — overkill pentru un repo gestionat de 1-2 oameni.
### Canal de comunicare cu comunitatea
**Recomandare: GitHub Discussions, nu Discord (deocamdată)**
De ce nu Discord acum:
- Discord necesită moderare activă și prezență constantă
- O comunitate Discord goală arată mai rău decât să nu ai deloc
- Oamenii nu intră pe un Discord cu 5 membri
- Revenim la Discord când avem 50+ contributori activi
**GitHub Discussions — categorii:**
- **Anunțuri** — lansări, produse noi (doar maintainer poate posta)
- **Idei de produse** — ce ar trebui să existe pe portal
- **Ajutor** — întrebări tehnice despre cum să contribui
- **General** — orice altceva
**Newsletter (opțional dar recomandat):**
- Buttondown.email (gratuit până la 1000 abonați) sau Substack
- Frecvență: o dată pe lună, nu mai des
- Conținut: produse noi, impact, câteva statistici, ce urmează
- Subiect: "vreaudigital — [luna] [an]: ce s-a întâmplat"
---
## 6. Planul de migrare Gitea → GitHub
### Opțiunea A — Fresh repo pe GitHub (recomandată)
**Când s-o alegi:** Dacă git history-ul de pe Gitea conține experimente, mesaje de commit interne, sau commit-uri "WIP fix OMG", e mai curat să pornești fresh pe GitHub.
**Pași:**
1. Creezi organizația `vreaudigital` pe GitHub
2. Creezi repo `platform` (public)
3. Pregătești codul local (curat, toate fișierele de mai sus prezente)
4. `git remote add github https://github.com/vreaudigital/platform.git`
5. `git push github main`
6. Setezi GitHub ca remote principal: `git remote set-url origin https://github.com/vreaudigital/platform.git`
7. Pe Gitea, setezi un **push mirror** spre GitHub (Settings → Git Hooks sau Mirrors) — orice push pe Gitea se duce automat și pe GitHub
**Avantaj:** History curat pe GitHub, fără "urmele" de lucru intern.
### Opțiunea B — Mirror automat Gitea → GitHub
**Când s-o alegi:** Dacă history-ul e deja curat și vrei să continui să lucrezi pe Gitea.
**Pași:**
1. Pe Gitea: Settings → Repository → Mirror Settings → Push Mirror
2. Adaugi GitHub URL + token GitHub cu permisii `repo`
3. Testezi că push-ul se propagă corect
4. Setezi sync interval: 10-30 minute (sau imediat la push)
**Dezavantaj:** Issues, PRs, și Discussions de pe GitHub nu se sincronizează înapoi pe Gitea. Trebuie să decizi: GitHub e pentru comunitate, Gitea e pentru tine.
### Ce rămâne pe Gitea
- Backup complet al repo-ului (mirror pasiv)
- Folosit intern dacă vrei să experimentezi înainte de push la GitHub
- Nu îl faci public — rămâne privat ca "working copy"
- Dacă infrastructure-ul de la beletage.ro pică, GitHub rămâne up
### Ce facem cu Cloudflare Pages
Cloudflare Pages poate fi conectat direct la GitHub repo (nu Gitea). La lansare:
1. Deconectezi Cloudflare Pages de la Gitea (dacă era conectat)
2. Reconectezi la GitHub repo `vreaudigital/platform`
3. Deploy-ul automat merge acum din GitHub → Cloudflare Pages
---
## 7. Timeline recomandată
```
Acum → Construiești MVP (Faza 1 din PLAN.md)
Săptămâna 4 → Site live pe vreaudigital.ro, 5 produse, 1 demo
Săptămâna 4 (end) → Checklist pre-lansare complet
Ziua X (lansare) → Gitea private → GitHub public + campanie
Ziua X+1 până X+7 → Răspunzi la tot, fix rapid, prima contribuție externă
Luna 2 → 15 produse, GitHub Discussions activ, newsletter #1
Luna 3 → Evaluezi dacă Discord merită deschis
```
---
## 8. Ce nu faci la lansare (capcane comune)
| Capcana | De ce o eviți |
|---------|---------------|
| Lansezi cu un README gol "coming soon" | Prima impresie = ultima impresie pe HN/Reddit |
| Ceri star-uri în mod agresiv | Pare spam, dăunează credibilității |
| Faci PR blast la zeci de oameni | Spam, te pui rău cu comunitatea |
| Promiti features care nu există | "Roadmap ambițios" fără delivery = credibilitate zero |
| Răspunzi defensiv la critici | Pe HN mai ales, critica negativă tratată bine devine pozitivă |
| Lansezi vineri seara | Postezi luni-marți dimineața pentru engagement maxim |
| Faci un GitHub cu 100 de issues deschise | Arată abandonat. Zero issues la lansare, deschizi tu câteva "good first issue" |
---
## TL;DR — Checklist rapid înainte de butonul "Make public"
```
□ Site live pe vreaudigital.ro
□ 5+ produse cu pagini complete
□ 1+ demo funcțional (traducător birocratic recomandat)
□ README cu screenshot
□ CONTRIBUTING.md
□ LICENSE (MIT)
□ CODE_OF_CONDUCT.md
□ .github/ISSUE_TEMPLATE/ (3 template-uri)
□ .github/pull_request_template.md
□ GitHub Actions: build check pe PR
□ Niciun secret în git history
□ Org GitHub "vreaudigital" creată
□ Cloudflare Pages reconectat la GitHub
□ Draft-uri postări HN + r/Romania gata
□ 5 persoane de contactat direct pregătite
```
Când toate astea sunt bifate, lansezi un luni dimineața și stai toată ziua la ecran.