Nano Banana Pro
Agent skill for nano-banana-pro
- **Navn**: Strix (norsk navn for hubro/owl)
Sign in to like and favorite skills
Hovedformål: Opptaksystem
Brukergrupper:
Kjernefunksjonalitet (5 hovedmoduler):
Forenklet navigasjon: I frontend vises foreløpig kun 3 hovedkategorier (Opptak, Organisasjon, Utdanning) som organiserer de 5 modulene.
strix/ ├── CLAUDE.md # Prosjektets hukommelse og dokumentasjon ├── README.md # Brukerrettet dokumentasjon ├── requirements/ # Alle krav og dokumentasjon │ ├── design/ # Design og fargepalett (Hubro/owl logo) │ │ ├── design.md # Fargepalett og designsystem │ │ └── Hubro Color.png # Logo referanse │ ├── konsepter/ # Konseptdokumenter og tekniske analyser │ │ ├── GRAPHQL_BEST_PRACTICES_FEEDBACK.md # GraphQL best practices analyse │ │ ├── SECURITY.md # Sikkerhetsdokumentasjon │ │ ├── SECURITY_AUDIT_CRITICAL.md # Kritisk sikkerhetsaudit │ │ └── TECHNICAL_DEBT.md # Teknisk gjeld og refactoring │ └── krav/ # Domenekrav og templates │ ├── opptak/ # Modul: Opptak │ ├── templates/ # Maler for domenekrav │ └── tilgangsstyring/ # Roller og tilgang ├── frontend/ # React + Vite + TailwindCSS + shadcn/ui ✅ │ ├── src/ │ │ ├── components/ # UI komponenter │ │ │ ├── app-sidebar.tsx # Hovednavigasjon med GraphiQL-lenke ✅ │ │ │ ├── dashboard.tsx # Dashboard med statistikk ✅ │ │ │ └── ui/ # shadcn/ui komponenter ✅ │ │ ├── hooks/ # React hooks ✅ │ │ ├── lib/ # Utilities ✅ │ │ └── index.css # TailwindCSS med custom fargepalett ✅ │ ├── public/ # Statiske filer │ │ └── owl-logo.png # Logo og favicon ✅ │ ├── index.html # HTML template med "Strix" title ✅ │ ├── dist/ # Bygget frontend (kopieres til backend) ✅ │ └── package.json # Frontend avhengigheter ✅ └── backend/ # Spring Boot + GraphQL backend ✅ ├── src/main/java/no/utdanning/opptak/ │ ├── controller/ # Web controllers │ │ ├── FrontendController.java # React SPA routing ✅ │ │ └── GraphiQLController.java # GraphiQL endpoint ✅ │ ├── domain/ # Domeneklasser ✅ │ ├── graphql/ # GraphQL resolvers ✅ │ ├── service/ # Forretningslogikk (AuthService, JwtService) ✅ │ ├── repository/ # Database-tilgang ✅ │ └── config/ # Konfigurasjon (WebConfig med CORS) ✅ ├── src/main/resources/ │ ├── static/ # Produksjons frontend filer ✅ │ │ ├── assets/ # CSS, JS og andre assets ✅ │ │ ├── index.html # React entry point ✅ │ │ └── owl-logo.png # Logo for produksjon ✅ │ ├── graphql/ # GraphQL schemas ✅ │ ├── db/migration/ # Flyway database migrations ✅ │ ├── application.yml # Hovedkonfigurasjon ✅ │ ├── application-dev.yml # Development profil (H2 in-memory) ✅ │ └── application-prod.yml # Production profil (H2 file-based) ✅ ├── data/ # H2 database filer (produksjon) ✅ ├── start-dev.sh # Development startup ✅ ├── start-prod.sh # Production startup ✅ ├── pom.xml # Maven med Spotless og Checkstyle ✅ └── checkstyle.xml # Kodekvalitet regler ✅
User Story Mapping:
Entity Maps:
Example Mapping (per User Story):
requirements/design/design.md):
#1F261E (mørk grønn/charcoal)#F2C53D (gul/gull)#F27C38 (oransje)#F2F2F2 (lys grå)#F2E3B3 (lys krem/beige)app-sidebar.tsx - Hovednavigasjon med rolle-switcher og GraphiQL-lenkedashboard.tsx - Statistikk og KPI-kortFrontendController.java - Serverer React SPA@/ peker til src/ mappen./mvnw clean install./mvnw test./mvnw spotless:apply ✅ IMPLEMENTERT./mvnw checkstyle:check ✅ IMPLEMENTERT./mvnw test -Dtest=KlasseNavn./start-dev.sh (H2 in-memory, port 8080)sudo ./start-prod.sh (H2 file-based, port 80)npm run dev (http://localhost:5173/)npm run buildnpm run previewnpm run lintMaven wrapper fix:
-Dmaven.multiModuleProjectDirectory=$APP_HOME i mvnw./mvnw spotless:apply før commit ✅ IMPLEMENTERTnpm run build og kopier til backend/static/ før produksjon ✅ IMPLEMENTERTVi har implementert moderne Spring Boot test best practices (2025) med 154 tester organisert i 3 kategorier:
backend/src/test/java/no/utdanning/opptak/ ├── unit/ │ └── service/ ← Rene unit tests (ingen Spring kontekst) │ ├── OpptakServiceTest.java (10 tester) │ ├── OpptakSecurityServiceTest.java (11 tester) │ ├── JwtServiceTest.java (12 tester) │ ├── OpptakQueryResolverTest.java (7 tester) │ └── OpptakMutationResolverTest.java (10 tester) ├── slice/ │ └── repository/ ← @DataJpaTest/@JdbcTest slice tests │ ├── JdbcOpptakRepositoryTest.java (12 tester) │ ├── BrukerRepositoryTest.java (4 tester) │ ├── UtdanningRepositoryTest.java (20 tester) │ └── OpptakRepositoryTest.java (9 tester) └── integration/ ← @SpringBootTest integrasjonstester ├── AuthGraphQLIntegrationTest.java (3 tester) ├── GraphQLSecurityIntegrationTest.java (6 tester) ├── OrganisasjonAccessControlTest.java (10 tester) ├── JwtAuthenticationFilterTest.java (6 tester) ├── AdministratorRoleIntegrationTest.java (6 tester) ├── RoleBasedAccessControlTest.java (13 tester) ├── JwtServiceSpringSecurityIntegrationTest.java (6 tester) └── SimpleAuthServiceTest.java (9 tester)
Unit Tests (50 tester)
@ExtendWith(MockitoExtension.class) - Ingen Spring kontekstSlice Tests (45 tester)
@DataJpaTest - Kun database lag (repository tests)@JdbcTest - JDBC-spesifikke repository tests med H2 in-memoryIntegration Tests (59 tester)
@SpringBootTest - Full applikasjonskontekstTest Slice Benefits:
Security Testing:
@WithMockUser for rolle-basert testingDatabase Testing:
@Sql for test-data oppsett per test# Alle tester ./mvnw test # Kun unit tests (raskest) ./mvnw test -Dtest="**/unit/**/*Test" # Kun repository slice tests ./mvnw test -Dtest="**/slice/**/*Test" # Kun integration tests (tregest) ./mvnw test -Dtest="**/integration/**/*Test" # Spesifikk test ./mvnw test -Dtest="OpptakServiceTest"
PROBLEM: Jeg gjør ofte feil når jeg tester GraphQL API manuelt med curl ved å prøve å lage kompliserte nested kommandoer for å hente JWT token.
RIKTIG FREMGANGSMÅTE: Alltid gjør dette i 2 separate steg:
Steg 1: Hent JWT token
curl -s -X POST http://localhost:8080/graphql \ -H "Content-Type: application/json" \ -d '{"query": "mutation { login(input: { email: \"[email protected]\", passord: \"test123\" }) { token } }"}'
Steg 2: Bruk token i faktisk GraphQL spørring
curl -X POST http://localhost:8080/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer [SETT_INN_TOKEN_HER]" \ -d '{"query": "{ alleOpptak { id navn type aar status } }"}'
Test-brukere tilgjengelig:
Eksempel på vellykket alleOpptak respons:
{ "data": { "alleOpptak": [ { "id": "ntnu-lokalt-v26", "navn": "NTNU lokalt opptak vår 2026", "type": "LOKALT", "aar": 2026, "status": "FREMTIDIG", "aktiv": true, "administrator": {"navn": "Norges teknisk-naturvitenskapelige universitet"} }, // ... flere opptak ] } }
CLAUDE.md - Denne filen, prosjektets hukommelseREADME.md - Brukerrettet dokumentasjonrequirements/konsepter/ - Konseptdokumenter og tekniske analyserrequirements/krav/templates/ - Templates for domenekrav dokumentasjonrequirements/krav/*/ - Domenekrav per modulrequirements/design/ - Logo og fargepalettbackend/src/main/resources/graphql/ - GraphQL schemasbackend/src/main/resources/application.yml - Backend konfigurasjonbackend/src/main/resources/static/ - Produksjons frontend filer ✅ IMPLEMENTERTbackend/src/main/java/.../controller/FrontendController.java - React SPA routing ✅ IMPLEMENTERTbackend/src/test/ - Test system med unit/slice/integration structure ✅ IMPLEMENTERTfrontend/src/components/ - React komponenterfrontend/index.html - HTML template med Strix branding ✅ IMPLEMENTERTfrontend/public/owl-logo.png - Logo og favicon ✅ IMPLEMENTERTfrontend/package.json - Frontend avhengigheteruser-story-map-template.md - Template for user story mappingentity-map-template.md - Template for entitetsdiagram (Mermaid ER)example-mapping-template.md - Template for example mapping per brukerhistorieURL: http://opptaksapp.smidigakademiet.no/
Arkitektur:
Endpoints:
🔧 Development (utvikling):
🚀 Production (produksjon):
Komplett steg-for-steg deployment av frontend endringer:
Bygg frontend til statiske filer:
cd frontend npm run build
Kopier frontend build til backend (fra root directory):
rm -rf backend/src/main/resources/static/assets/ cp -r frontend/dist/* backend/src/main/resources/static/
Commit endringene:
git add . git commit -m "Deploy frontend til produksjon" git push origin main
Start production server:
cd backend sudo ./start-prod.sh # Krever sudo for port 80
⚠️ Viktig: I produksjon serverer Spring Boot både frontend og API fra samme server, mens i development kjører de på separate porter for optimal utviklingsopplevelse.
Database konfiguration:
Development:
Production:
Nåværende status:
Fremtidige forbedringer: