ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Din personliga översikt: planstatus, poängprognos och nästa uppgift i veckoplanen.
Translation pending
EducationTypeScript · PLpgSQLGitHub @Oholmgren0608OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
HP Lift - Studieplan for Hogskoleprovet
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Mata in dina HP-resultat (normpoäng + råpoäng per delprov) så bygger sidan om prioritering, tidsfördelning och veckoplan.
Kräver Node.js 20.9 eller nyare. I WSL, från projektmappen (~/pi/Webappar/HP-projekt):
npm install
npm run dev
Öppna http://127.0.0.1:43123.
För lokal utveckling med hot reload: npm run dev (samma port).
npm run dev — utvecklingsservernpm run build — produktionsbyggenpm run start — kör byggt resultatnpm run lint — ESLintnpm run fragebank:validate / fragebank:kontroll / fragebank:upload /
fragebank:export — arbetsflödet för nya övningsfrågor (se nedan)npm run fragebank:aldre / fragebank:balansera — andra kontrollen och
jämnare svarspositioner för de äldre frågorna (se nedan)Databasen (public.questions) är sanningen för alla frågor. Nya
övningsfrågor tas fram så här:
content/ovningsfragor/<delprov>.json (id
ovn-<delprov>-001 …). Kör npm run fragebank:validate – den kontrollerar
bland annat antal svarsalternativ (ORD och NOG har fem, som på provet),
att rätt svar är spritt över positionerna och att inget är en dubblett.npm run fragebank:kontroll -- blind <delprov> skriver
de frågor som inte redan kontrollerats, utan facit, till
content/ovningsfragor/.andra-kontroll/. En
annan AI än den som skrev frågorna löser dem och skriver
<delprov>.svar.json; npm run fragebank:kontroll -- merge <delprov>
markerar varje fråga som ense eller oense.npm run fragebank:upload -- --dry-run, sedan npm run fragebank:upload
(eller -- elf las för bara vissa delprov) lägger in nya frågor som
utkast (kräver SUPABASE_SERVICE_ROLE_KEY i .env.local). Frågor som
redan finns i databasen rörs inte – efter uppladdningen ändras de på
/review./review. "Publicera … ense" publicerar bara
frågor där andra kontrollen var ense och som saknar felrapporter; oense
frågor godkänns en och en.npm run fragebank:export skriver om reservbanken
src/lib/content/fallback-bank.json från databasen.Användare kan rapportera fel i en fråga efter ett pass. När tre olika
användare har öppna felrapporter dras frågan tillbaka till utkast, och
rapporterna visas på /review (vyn "Att granska" visar även publicerade
frågor med enstaka rapporter). Rapporterna stängs när frågan publiceras igen
eller markeras som hanterade.
De 146 frågor som fanns innan content/ovningsfragor/ har gått igenom samma
andra kontroll. Resultatet ligger i content/aldre-fragor/andra-kontrollen.json
(121 ense, 25 oense). När migration 0017 är körd:
npm run fragebank:aldre -- apply --dry-run, sedan utan --dry-run, skriver
resultatet till databasen. De oense frågorna syns under "Att granska" på
/review tillsammans med anteckningen om vad som är fel.npm run fragebank:balansera -- --dry-run, sedan utan flaggan, jämnar ut
rätt svars position i ORD, LÄS och ELF (i dag är rätt svar B i 21 av 24
ORD-frågor). Bara ordningen ändras. XYZ och de flesta DTK-frågor har tal
eller etiketter i stigande ordning och behöver nya distraktorer för hand.npm run fragebank:export så att reservbanken följer med.Provfrågor som importeras ur UHR:s prov (scripts/import-prov) är
upphovsrättsskyddade. De används bara som förlagor och kan aldrig publiceras
(databasen stoppar det från migration 0017).
Appen synkar all sparad data till ett Supabase-konto när användaren loggar in med Google. Utan inloggning sparas allt i localStorage som tidigare.
Kopiera .env.local.example till .env.local och fyll i
NEXT_PUBLIC_SUPABASE_URL och NEXT_PUBLIC_SUPABASE_ANON_KEY.
Du hittar båda i Supabase Dashboard: klicka på Connect uppe till höger
i projektöversikten, eller gå till Settings → API Keys. Använd en
Publishable key (sb_publishable_...) i
NEXT_PUBLIC_SUPABASE_ANON_KEY — aldrig en Secret key.
Kör migrationsfilerna i Supabase Dashboard → SQL Editor, i nummerordning.
supabase/migrations/ innehåller nu exakt 0001–0009. Statusen nedan är
verifierad mot live-databasen (Management-API-frågor + en Playwright-körning
av appen mot live-DB). Samtliga migrationer 0001–0010 finns nu i
live-databasen; 0004–0007 kördes i dag, 0008–0010 kördes tidigare
under sina dåvarande namn.
| Migration | Innehåll | Status i live-DB | Bevis |
|---|---|---|---|
0001_user_state | user_state-tabellen med RLS (varje användare ser bara sina egna rader), för molnsynk | APPLIED | — |
0002_duel_pvp | spelarprofiler (ELO/statistik), matcher, per-fråga-svar och matchmaking-kö, plus ranking-RPC:er | APPLIED | — |
0003_duel_reviews | recensioner och betyg efter dueller, rapporter, flaggning och bot-svårighetsjustering | APPLIED | — |
0004_duel_integrity | server-auktoritativ rättning (duel_questions), tätare RLS, vyn duel_public_profiles och viktad received_rating_count | APPLIED (i dag) | duel_questions 136 rader och vyn duel_public_profiles finns; RPC-signaturerna matchar klienten och de gamla 5/3/4-args-varianterna är borta |
0005_questions | Supabase-backade övningsfrågor: questions och reflect_prompts (ORD, MEK, LÄS, ELF, DTK, XYZ, KVA, NOG) | APPLIED (i dag) | questions 146 rader, reflect_prompts 3 rader; publika SELECT-policyer för anon+authenticated |
0006_exam_import | kolumner och tabeller för import-pipelinen (exams, frågemetadata och prov-figures-bucketen) | APPLIED (i dag) | exams finns med 0 rader (ingen import körd ännu) |
0007_usernames | unikt användarnamn per profil (username, skiftlägesokänsligt index och profil-RPC:er) | APPLIED (i dag) | kolumnen player_profiles.username finns |
0008_duel_rpc_hardening | härdar kö-/avboknings-RPC:erna (search_path och rättigheter) | APPLIED UNDER OLD NAME | kördes tidigare som 0004_duel_rpc_hardening (går inte att verifiera via REST) |
0009_leaderboard | vecko-XP-topplista för gamification | APPLIED UNDER OLD NAME | leaderboard_entries finns med 3 policyer; kördes tidigare som 0005_leaderboard |
Kontrollerat i den applicerade databasen:
duel_questions har RLS påslaget och 0 policyer — facit går inte att
läsa från klienten.questions, reflect_prompts och exams har publika SELECT-policyer för
anon och authenticated.duel_submit_answer(uuid, text, integer, integer),
duel_mark_finished(uuid), duel_finish_bot(uuid, integer),
duel_start_bot_match(text) och
duel_submit_review(uuid, integer, text, text, text). EXECUTE = true för
authenticated, false för anon./rest/v1/questions 200, 146
rader; /rest/v1/reflect_prompts 200, 3 rader), ingen PGRST205 och
ingen lokal fallback behövs. /prov visar "Inga importerade prov ännu"
eftersom exams har 0 rader — import-pipelinen måste köras för att fylla
den. 404-sidorna är fortsatt korrekta och inga databasskrivningar skedde
(endast läsningar).Status för åtgärden: supabase/manual/apply-0004-0007.sql är körd
(consumed) — den kördes i sin helhet i dag och sparas bara som dokumentation
över exakt vad som applicerades. Ingen ny migration behövs.
supabase/combined_migrations.sql (0001 → 0009) ska fortfarande inte
klistras in blint: samtliga 0001–0009 finns redan i live-databasen och
skulle köras om i onödan.
Varning:
supabase_migrations.schema_migrationsär fortfarande tom — Management-API-körningen registrerar inga versioner. Därför misslyckassupabase db push— den tror att inga migrationer är applicerade. Markera de redan körda som tillämpade en gång:supabase migration repair --status applied 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 --linkedObs:
0010kördes i praktiken under sitt gamla namn0006_duel_rpc_wrapper_hardening, så dess ledger-rad motsvarar inte någon fil isupabase/migrations/. Alternativet är att fortsätta köra filerna manuellt i nummerordning.
OBS
0010(kvar isupabase/manual/):0010_duel_rpc_wrapper_hardening.sqlär inte längre en migration. Den återskapar de gamla RPC-signaturerna och skulle därför backa0004_duel_integritys server-auktoritativa design och bryta klienten. Resultatet av den finns redan i live-databasen (de 16private.*-implementationerna), men de är nu föräldralösa — de publika funktionerna kommer från0004i stället. Det är ofarliga rester. Filen får aldrig köras igen och sparas bara som referens, tillsammans med..._rollback.sqloch..._verify.sqlisupabase/manual/.
Risken är stängd i live-databasen. 0004_duel_integrity är applicerad, så
rättningen är server-auktoritativ: facit ligger i duel_questions (RLS påslaget
med 0 policyer, alltså oläsbart från klienten) och klienten skickar varken
rätt/fel eller totalpoäng. De gamla klienttrustade RPC-signaturerna (5/3/4
argument) är borttagna och ersatta av de server-auktoritativa varianterna som
klienten anropar.
Kvarvarande kunskapslucka: de klientflöden som kräver en inloggad session är fortfarande otestade mot live-DB — matchmaking och poängsättning i dueller, att sätta användarnamn, publicering av recensioner samt provimporten. Det är en testlucka, inte en känd bugg.
http://127.0.0.1:43123 och http://localhost:43123.Vid första inloggningen mergas lokala data med molnet, nyckel för nyckel —
nyaste värdet vinner (lokal skrivtid vs. molnets updated_at). Därefter är
molnet källa till sanning och localStorage fungerar som offline-cache.
src/lib/sync/storage-sync.ts är en drop-in-ersättning för
localStorage.getItem/setItem.
0010_duel_rpc_wrapper_hardening | flyttar RPC-implementationerna till private och exponerar tunna public-wrappers | APPLIED UNDER OLD NAME | private.*-implementationerna för de 16 RPC:erna finns kvar; kördes tidigare som 0006_duel_rpc_wrapper_hardening |