En modern nyhetsapplikation byggd med Next.js 15 (App Router) och TypeScript.
Projektet är utvecklat som ett grupparbete av Josefine, Johan, Magui och Ahmed på Lexicon i Linköping.
- Översikt
- Teknikstack
- Teammedlemmar och Bidrag
- Förutsättningar
- Installation
- Miljövariabler
- Utveckling
- Projektstruktur
- Arkitektur
- Funktionalitet
- Distribution
- Felsökning
- Kontakt
News Gamma är en fullstack-nyhetsapplikation med fokus på prestanda, typesäkerhet och skalbarhet.
Projektet demonstrerar moderna webbutvecklingstekniker med server-first arkitektur, AI-integration och användarhantering.
- Responsiv design med Dark/Light mode
- Säker autentisering med e-postverifiering
- Rollbaserad åtkomstkontroll (Admin, Editor, User)
- Prenumerationssystem med Stripe
- AI-assisterad artikelgenerering
- CRUD-funktionalitet för artiklar och kategorier
- Dashboard med statistik och visualiseringar
- Extern API-integration (Elpriser, Väderdata)
- Next.js 15.5.4 (App Router, Turbopack)
- React 19.1.0 + TypeScript 5
- Tailwind CSS 4
- Radix UI, Embla Carousel, Lucide React
- Next Themes (Dark/Light mode)
- Prisma 6.18.0 (PostgreSQL)
- Better Auth 1.3.27
- Server Actions (Next.js)
- Nodemailer 7.0.10
- Zod 4.1.12
- Stripe 19.1.0
- Better Auth Stripe Plugin
- AI SDK (Vercel), Google AI SDK (Gemini 2.5 Flash)
- MDXEditor 3.48.0
- Spotprices API – Elpriser SE1–SE4
- SMHI API – Väderdata
- CRUD för artiklar & kategorier
- Stripe-integration
- Dashboard-visualiseringar
- Rollbaserad åtkomstkontroll
- Cookie-banner (GDPR)
- Elpris-API med visualisering
- Gemini AI-integration
- Google Search-koppling
- MDX-editor
- Zod-validering
- E-postverifiering (Better Auth + Nodemailer)
- Kontaktformulär & templates
- SMTP-konfiguration
- Design, logotyp, UX-flöden
- Better Auth-integration
- Rollhantering (Admin/Editor/User)
- Sökfunktion & SEO-sluggar
- Article rendering-komponenter
- Projektledning
- Node.js 18+
- npm / pnpm / yarn
- PostgreSQL
- Stripe-konto
- (Valfritt) Google AI API-nyckel
# 1. Klona repo
git clone <repository-url>
cd news-gamma
# 2. Installera beroenden
npm install
# 3. Skapa miljöfil
cp .env.example .env
# 4. Generera Prisma Client
npx prisma generate
# 5. Migrera databas
npx prisma migrate dev
# 6. Starta utvecklingsserver
npm run dev
## Miljövariabler
Skapa en `.env`-fil i projektets rot. Inkludera aldrig denna fil i versionshantering.
### Nödvändiga variabler
```env
# Databas
DATABASE_URL="postgresql://postgres:password@localhost:5432/news-gamma"
# Autentisering
BETTER_AUTH_SECRET="en-lång-slumpmässig-och-hemlig-sträng"
BETTER_AUTH_URL="http://localhost:3000"
# Stripe
STRIPE_SECRET_KEY="sk_test_..."
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_..."
# E-post (Nodemailer)
EMAIL_HOST="smtp.example.com"
EMAIL_PORT="587"
EMAIL_USER="smtp-user@example.com"
EMAIL_PASS="smtp-password"
# Google AI (Gemini)
GOOGLE_GENERATIVE_AI_API_KEY="your-api-key"Obs: För produktion, använd plattformens secure environment variable storage.
npm run dev # Starta utvecklingsserver
npm run build # Bygg för produktion
npm start # Starta produktionsserver
npm run lint # Kör ESLint- Besök
http://localhost:3000/för startsidan - Registrera en användare via
/registrera - Logga in via
/logga-in - Kontrollera databastabell efter migrationer
- Verifiera prenumerationsflödet i Stripe testläge
news-gamma/
├── prisma/
│ └── schema.prisma # Databasmodeller
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── admin/ # Admin-panel
│ │ │ ├── artiklar/ # Artikelhantering (CRUD)
│ │ │ ├── artiklar-ai/ # AI-artikelgenerering
│ │ │ ├── anvandare/ # Användarhantering
│ │ │ ├── kategorier/ # Kategorihantering
│ │ │ └── dashboard/ # Statistik & visualisering
│ │ ├── artiklar/ # Artikelvisning
│ │ │ └── [slug]/ # Dynamisk artikelsida
│ │ ├── el/ # Elprisinformation
│ │ ├── kategori/ # Kategorifiltrering
│ │ ├── mina-sidor/ # Användarinställningar
│ │ ├── prenumeration/ # Stripe checkout
│ │ └── sok/ # Sökfunktionalitet
│ ├── components/ # React-komponenter
│ │ ├── Admin/ # Admin-specifika komponenter
│ │ ├── articles/ # Artikelkomponenter
│ │ ├── dashboard/ # Dashboard-komponenter
│ │ ├── Forms/ # Formulär (Login, Signup, Contact)
│ │ ├── layout/ # Layout-komponenter
│ │ └── ui/ # Återanvändbara UI-komponenter
│ ├── lib/
│ │ ├── actions/ # Server Actions
│ │ ├── auth.ts # Better Auth-konfiguration
│ │ ├── server-auth.ts # Server-side auth utilities
│ │ ├── prisma.ts # Prisma client
│ │ └── schema/ # Zod-scheman
│ └── types/ # TypeScript-typdefinitioner
├── public/ # Statiska tillgångar
└── package.json
prisma/schema.prisma- Databasschema med PostgreSQL providersrc/lib/prisma.ts- Prisma Client singleton-instanssrc/lib/auth.ts- Better Auth server-konfigurationsrc/lib/client/auth-client.ts- Better Auth client för Reactsrc/lib/server-auth.ts- Server-side auth middlewaresrc/lib/actions/- Server Actions för backend-logik
Projektet använder genomgående Server Actions för all backend-logik:
- Alla filer i
src/lib/actions/markerade med"use server" - Typsäker kommunikation mellan klient och server
- Optimerad prestanda med automatisk caching
Exempel på Server Actions:
admin.ts- Administratörsoperationercategory.ts- Kategorihanteringcomment.ts- Kommentarsfunktionalitetcontact-actions.ts- Kontaktformuläremail-actions.ts- E-postverifieringmail.ts- E-postutskick med Nodemailerprofile.ts- Användarprofilhanteringweather.ts- Väderdataweather-location.ts- Lokaliseringsfunktioner
- Better Auth med custom plugin för Stripe
- E-postverifiering vid registrering
- Rollbaserad åtkomstkontroll (Admin, Editor, User)
- Sessionshantering med säker token-lagring
- Server-side middleware för skyddade routes
- Article (med premium & editorsChoice flaggor)
- Category (med showInNavbar konfiguration)
- User (med roller, Stripe-integration, emailVerified)
- Comment
- Order & OrderItem
- Session & Account
- PasswordResetToken- Registrering med e-postverifiering
- Inloggning/utloggning
- Profilhantering (namn, e-post, lösenord)
- Prenumeration via Stripe
- Kommentera artiklar
- Sök artiklar
- Dark/Light mode
- Läsa premium-innehåll (kräver prenumeration)
- Skapa, redigera, ta bort artiklar
- AI-assisterad artikelgenerering med Gemini
- MDX-editor för rich text innehåll
- Kategorihantering med navbar-visning
- Användarhantering med rollfördelning
- Statistik och dashboard med visualiseringar
- Editor's Choice-markering
- Premium content-flaggning
- Användarbanhantering
- Responsiva artikelkort
- Karuseller för utvalt innehåll
- Kategoribaserad navigering
- SEO-optimerade URL:er med slugs
- Markdown-formaterat innehåll
- Artikelvyer och statistik
- Stripe - Prenumerationer och betalningar
- Gemini AI - Innehållsgenerering med Google Search
- Spotprices API - Elpriser för svenska elområden
- SMHI - Väderdata för Sverige
- Nodemailer - E-postkommunikation
Typfel efter schemaändringar
npx prisma generateAutentiseringsfel
- Kontrollera att
BETTER_AUTH_SECRETär korrekt angiven i.env - Verifiera att Stripe-nycklar matchar rätt miljö (test/production)
Lint-varningar
npm run lintDatabasanslutning
- Verifiera
DATABASE_URLi.env - Kontrollera att PostgreSQL-servern kör
- Testa anslutningen med
npx prisma db pull
Projektet är kompatibelt med plattformar som:
- Vercel - Rekommenderad för Next.js-projekt
- Railway - Med PostgreSQL-databas
- Render - Fullstack hosting
- Andra plattformar med Next.js och PostgreSQL-stöd
- Konfigurera alla miljövariabler i målmiljön
- Säkerställ att
BETTER_AUTH_SECRETär unik och säker (minst 32 tecken) - Uppdatera
BETTER_AUTH_URLtill produktions-URL - Använd produktions-nycklar för Stripe
- Kör databasmigrationer i produktionsmiljön:
npx prisma migrate deploy - Generera Prisma Client:
npx prisma generate - Testa autentisering, prenumerationsflöden och AI-funktionalitet
- Konfigurera SMTP för e-postleverans
# Installera Vercel CLI
npm i -g vercel
# Deploy
vercel
# Sätt miljövariabler
vercel env add DATABASE_URL
vercel env add BETTER_AUTH_SECRET
# ... och resten av variablernaTypfel efter schemaändringar
npx prisma generateAutentiseringsfel
- Kontrollera att
BETTER_AUTH_SECRETär korrekt angiven i.env - Verifiera att
BETTER_AUTH_URLmatchar din miljö - Kontrollera att Stripe-nycklar matchar rätt miljö (test/production)
Databasanslutning
- Verifiera
DATABASE_URLi.env - Kontrollera att PostgreSQL-servern kör
- Testa anslutningen:
npx prisma db pull - Kontrollera att migrationer är körda:
npx prisma migrate status
E-postleverans
- Testa SMTP-uppgifter med ett verktyg som Ethereal Email
- Kontrollera att
EMAIL_HOST,EMAIL_PORT,EMAIL_USER,EMAIL_PASSär korrekta - Verifiera att brandväggen tillåter utgående SMTP-trafik
AI-generering fungerar inte
- Kontrollera att
GOOGLE_GENERATIVE_AI_API_KEYär korrekt - Verifiera API-nyckelns behörigheter och kvoter
- Kontrollera nätverksanslutning till Google AI API
Build-fel
# Rensa cache och bygg om
rm -rf .next
npm run buildLint-varningar
npm run lintFör frågor, samarbeten eller support, kontakta utvecklarna:
Utvecklingsteam:
- Josefine - UX/UI, Autentisering & Projektledning
- Johan - E-postfunktionalitet & Verifiering
- Magui - Backend & Betalningsintegration
- Ahmed - AI-integration & Externa API
Institution: Lexicon i Linköping
News Gamma demonstrerar moderna webbutvecklingstekniker med:
- Server-first arkitektur med Server Actions och Server Components
- Typsäkerhet genom TypeScript och Zod-validering
- Skalbar autentisering med Better Auth och rollbaserad access control
- AI-integration för innehållsgenerering med Gemini
- Betalningshantering med Stripe
- Optimerad användarupplevelse med responsiv design och dark mode
- SEO-optimering med dynamiska routes och metadata
Tack för att du använder News Gamma!




