Counter-Strike news platform for the Iberian community (PT + ES).
Fast, clear, and built for people who follow CS every day.
Quick Start β’ Stack β’ Structure β’ Deploy
A curated CS news site with simple editorial structure and solid technical foundation.
Built to grow without becoming chaos.
- Players and fans in Portugal and Spain
- Content creators and amateur teams
- Esports projects that need real visibility
π° Story publishing with custom CMS
π Organization by category / theme
β‘ Fast, lightweight frontend
π Separate admin area
π― Live match tracking
π Editorial briefings
Iberian focus, not generic
Covers the scene that matters to PT/ES communities, not just tier-1 international.
Less noise, more context
Editorial structure: What happened + Why it matters. No clickbait.
Built to scale
Not just "posting news" β structure designed for multi-user, roles, and growth.
Frontend React 19 + TypeScript + Vite
Backend Node.js + Express
Validation Zod (runtime type safety)
State TanStack Query
Styling Tailwind CSS 4
Animation Framer Motion
client/ Frontend (9 pages, 65+ components)
server/ Backend (13 REST endpoints)
shared/ Common schemas and types
Separated by concern, connected by type safety.
No monolithic mess.
git clone https://github.com/Hugomelo123/iberiahubnoticias.git
cd iberiahubnoticias
pnpm install
PORT=8081 pnpm devAdmin access: http://localhost:8081/admin (password: iberia2026)
src/
βββ pages/ 9 routes
β βββ noticias.tsx Homepage feed
β βββ article.tsx Story detail
β βββ agenda.tsx Match broadcast center
β βββ admin.tsx CMS panel
β
βββ components/
β βββ editorial/ Domain components
β βββ ui/ 50+ Shadcn components
β
βββ lib/
βββ api.ts REST client
βββ utils.ts Helpers
routes.ts 13 REST endpoints (public + protected)
storage.ts Data layer (in-memory β PostgreSQL)
index.ts Express setup
vite.ts Dev server integration
schema.ts Zod schemas + TypeScript types
Used by both frontend and backend
GET /api/stories List all stories
GET /api/stories/:slug Single story
GET /api/matches Match schedule
GET /api/briefings Quick news
POST /api/auth/login AuthenticationPOST /api/stories Create
PUT /api/stories/:id Update
DELETE /api/stories/:id Delete
POST /api/matches Create match
PUT /api/matches/:id Update match
DELETE /api/matches/:id Remove match
POST /api/briefings Add briefing
DELETE /api/briefings/:id Remove briefingDevelopment β
Fully functional
Production β οΈ Requires PostgreSQL migration
Storage In-memory (ephemeral)
1. Push to GitHub (done)
2. railway.app β New Project β Deploy from GitHub
3. Add PostgreSQL service
4. Set environment variables
5. Deploy (automatic)DATABASE_URL=postgresql://...
AUTH_PASSWORD=your_secure_password
AUTH_TOKEN=your_jwt_secret
PORT=8081
NODE_ENV=productionFull guide: GUIA_DEPLOY.md
DOCUMENTACAO_COMPLETA.md Full architecture (27k words)
CODIGOS_COMPLETOS.md Code reference (all key files)
GUIA_DEPLOY.md Production deployment guide
RELATORIO_TESTES.md Test report + checklist
CONTRIBUTING.md How to contribute
- REST API backend (13 endpoints)
- React 19 frontend (9 pages)
- JWT authentication
- Full CRUD for stories/matches/briefings
- Admin CMS panel
- Editorial design system
- PostgreSQL migration
- Multi-user with roles
- Image upload system
- Email notifications
- Analytics dashboard
- PWA support
PRs welcome. Read CONTRIBUTING.md for guidelines.
git checkout -b feature/your-feature
git commit -m "feat: add your feature"
git push origin feature/your-featureUse Conventional Commits.
Dependencies 81
Lines of code 3,300+
Documentation 35k words
API endpoints 13
Pages 9
Components 65+
MIT License - see LICENSE
Built for the Iberian Counter-Strike community
Version 5.0.0 β’ January 2026