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)
This commit is contained in:
Claude VM
2026-05-13 00:10:32 +03:00
commit a6c03a091e
352 changed files with 75295 additions and 0 deletions
+521
View File
@@ -0,0 +1,521 @@
# 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.