[{"data":1,"prerenderedAt":1591},["ShallowReactive",2],{"portfolio-sv":3},[4,183,381,524,599,718,862,1002,1115,1232,1368,1443],{"id":5,"title":6,"body":7,"client":166,"date":167,"description":168,"extension":169,"featured":170,"meta":171,"navigation":170,"order":172,"path":173,"seo":174,"stem":175,"tags":176,"thumbnail":122,"__hash__":182},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fsia.md","SIA — Inkubatorplattform för Science Park Skövde",{"type":8,"value":9,"toc":157},"minimark",[10,15,19,22,26,79,83,86,112,116,123,129,135,141,145,151],[11,12,14],"h2",{"id":13},"översikt","Översikt",[16,17,18],"p",{},"SIA (Science Park Skövde Incubator Application) är ett heltäckande hanteringssystem byggt för att effektivisera verksamheten i Science Park Skövdes startupprogram. Systemet hanterar över 200 startups och följer deras resa från ansökan genom olika faser till framgångsrikt exit.",[16,20,21],{},"Projektet startade 2020 och är fortfarande i aktiv utveckling med kontinuerliga förbättringar.",[11,23,25],{"id":24},"vad-systemet-gör","Vad systemet gör",[27,28,29,37,43,49,55,61,67,73],"ul",{},[30,31,32,36],"li",{},[33,34,35],"strong",{},"Ansökningsportal"," — Publik sjustegs-wizard med tvåspråksstöd (svenska\u002Fengelska), filuppladdning och teamhantering",[30,38,39,42],{},[33,40,41],{},"Företagslivscykel"," — Spåra startups genom Formation, Business och Exit-faser",[30,44,45,48],{},[33,46,47],{},"Coachhantering"," — Tilldela och spåra affärscoachers timmar och interaktioner",[30,50,51,54],{},[33,52,53],{},"Ekonomiuppföljning"," — Intäktsrapportering, investeringsspårning och verifikationshantering",[30,56,57,60],{},[33,58,59],{},"Kommunikationshubb"," — Notifikationer, push-meddelanden och CEO-brev",[30,62,63,66],{},[33,64,65],{},"Företagsshowcase"," — Publik visning för TV-skärmar med roterande presentationer och realtidsstatistik",[30,68,69,72],{},[33,70,71],{},"Dokumenthantering"," — 2GB molnlagring per företag",[30,74,75,78],{},[33,76,77],{},"Analysverktyg"," — Realtidsdashboards och omfattande rapportering",[11,80,82],{"id":81},"tekniska-val","Tekniska val",[16,84,85],{},"Systemet är byggt som en ren SPA + API-arkitektur med fullständig separation mellan frontend och backend:",[27,87,88,94,100,106],{},[30,89,90,93],{},[33,91,92],{},"Lösenordsfri autentisering"," — Magic link-baserad inloggning för enkel och säker åtkomst",[30,95,96,99],{},[33,97,98],{},"Realtidsuppdateringar"," — SignalR för direktnotifikationer och live-uppdateringar",[30,101,102,105],{},[33,103,104],{},"Typsäkerhet"," — Full TypeScript-täckning med autogenererad API-klient",[30,107,108,111],{},[33,109,110],{},"Mobil först"," — Responsiv design optimerad för alla enheter",[11,113,115],{"id":114},"plattformen","Plattformen",[16,117,118],{},[119,120],"img",{"alt":121,"src":122},"SIA Dashboard — KPI:er, investeringsinsikter och aktivitetsflöde","\u002Fimages\u002Fportfolio\u002Fsia-dashboard.png",[16,124,125],{},[119,126],{"alt":127,"src":128},"Företagsprofil med Innovation Readiness Level","\u002Fimages\u002Fportfolio\u002Fsia-company.png",[16,130,131],{},[119,132],{"alt":133,"src":134},"Företagskatalog — över 160 startups","\u002Fimages\u002Fportfolio\u002Fsia-directory.png",[16,136,137],{},[119,138],{"alt":139,"src":140},"Ansökningshantering med statuspipeline","\u002Fimages\u002Fportfolio\u002Fsia-applications.png",[11,142,144],{"id":143},"tech-stack","Tech stack",[16,146,147,150],{},[33,148,149],{},"Frontend:"," Vue 3.5, TypeScript, PrimeVue, Tailwind CSS, Pinia, Vite, SignalR, Chart.js",[16,152,153,156],{},[33,154,155],{},"Backend:"," ASP.NET Core 9.0, C#, Entity Framework Core, SQL Server, SignalR, Serilog",{"title":158,"searchDepth":159,"depth":159,"links":160},"",2,[161,162,163,164,165],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":81,"depth":159,"text":82},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"Science Park Skövde","2020-01-01","Komplett hanteringssystem för Science Park Skövdes startupprogram — från ansökan till exit, med över 200 startups.","md",true,{},1,"\u002Fportfolio\u002Fsv\u002Fsia",{"title":6,"description":168},"portfolio\u002Fsv\u002Fsia",[177,178,179,180,181],".net","vue","typescript","signalr","sql-server","UeM_8fSoIvNcRQlScDvE0Zl_qwonGM9HTSXeVeuZItc",{"id":184,"title":185,"body":186,"client":369,"date":370,"description":371,"extension":169,"featured":170,"meta":372,"navigation":170,"order":159,"path":373,"seo":374,"stem":375,"tags":376,"thumbnail":331,"__hash__":380},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fbizscree.md","Bizscree — Plattform för startups och aggregatorer",{"type":8,"value":187,"toc":362},[188,190,193,196,198,271,273,276,324,326,332,338,344,346,351,356],[11,189,14],{"id":13},[16,191,192],{},"Bizscree ersätter den fragmenterade rapporteringen där startups tvingas duplicera sin data för varje investerare, inkubator eller accelerator de arbetar med. Istället skapar företagen en enda heltäckande profil — ekonomi, team, projekt, KPI:er — och beviljar varje aggregator exakt den nivå av åtkomst som behövs.",[16,194,195],{},"\"Bygg en gång, dela många\" — en sanningskälla per företag, med granulär kontroll över vem som ser vad.",[11,197,25],{"id":24},[27,199,200,206,212,218,224,230,236,241,247,253,259,265],{},[30,201,202,205],{},[33,203,204],{},"Företagsprofiler"," — Ekonomi, team, projekt, affärsplan och datarum samlade på ett ställe",[30,207,208,211],{},[33,209,210],{},"Portföljhantering"," — Aggregatorer får granulära behörighetskontroller över sina portföljbolag",[30,213,214,217],{},[33,215,216],{},"Virtuella företag"," — Aggregatorer kan skapa profiler för företag som ännu inte finns på plattformen; riktiga företag kan senare kräva och ta över dem",[30,219,220,223],{},[33,221,222],{},"KPI-uppföljning"," — Anpassade mätetal, mål och trendanalys per portföljbolag",[30,225,226,229],{},[33,227,228],{},"Portföljanalys"," — Sektorfördelning, fasfördelning och prestandarapporter",[30,231,232,235],{},[33,233,234],{},"CEO-rapporter"," — Strukturerade uppdateringar och progress boards",[30,237,238,240],{},[33,239,92],{}," — Magic link-baserad inloggning med stöd för flera organisationer",[30,242,243,246],{},[33,244,245],{},"Realtidsnotifikationer"," — WebSocket-levererade meddelanden via SignalR",[30,248,249,252],{},[33,250,251],{},"AI-drivna funktioner"," — CEO-briefer och förslag via OpenAI",[30,254,255,258],{},[33,256,257],{},"PDF-export"," — Rapporter och profiler som nedladdningsbara PDF:er",[30,260,261,264],{},[33,262,263],{},"Revisionsloggar"," — Komplett spårbarhet för efterlevnad",[30,266,267,270],{},[33,268,269],{},"Guidade onboarding-wizards"," — Både för företag och aggregatororganisationer",[11,272,82],{"id":81},[16,274,275],{},"Bizscree är byggt som en ren SPA + API-arkitektur med full separation mellan frontend och backend:",[27,277,278,284,290,295,301,312,318],{},[30,279,280,283],{},[33,281,282],{},"Typsäker end-to-end"," — Autogenererad TypeScript-klient från OpenAPI-specen via hey-api",[30,285,286,289],{},[33,287,288],{},"Organisationsmedveten auktorisering"," — Middleware extraherar organisationskontext, policies och handlers styr åtkomst per aggregator",[30,291,292,294],{},[33,293,98],{}," — SignalR-hubbar levererar notifikationer direkt i gränssnittet",[30,296,297,300],{},[33,298,299],{},"Rate limiting"," — Fasta fönsterpolicyer skyddar känsliga endpoints (auth, AI, uppladdningar)",[30,302,303,306,307,311],{},[33,304,305],{},"Health checks"," — ",[308,309,310],"code",{},"\u002Fhealth","-endpoint för lastbalanserare och övervakning",[30,313,314,317],{},[33,315,316],{},"Strukturerad loggning"," — Serilog med rullande filer i produktion",[30,319,320,323],{},[33,321,322],{},"Produktionshärdat"," — Tio implementationsfaser genomförda: säkerhet, infrastruktur, deployment, funktioner, polish, notifikationer, analys och KPI:er",[11,325,115],{"id":114},[16,327,328],{},[119,329],{"alt":330,"src":331},"Bizscree dashboard — portföljöversikt med företag, projekt, CEO-rapporter och diagram för förvärv, länder och könsfördelning","\u002Fimages\u002Fportfolio\u002Fbizscree-dashboard.png",[16,333,334],{},[119,335],{"alt":336,"src":337},"Progress Board — portföljstatus per företag med trafikljusindikatorer för produktion, publicering, finans och efterlevnad","\u002Fimages\u002Fportfolio\u002Fbizscree-portfolio.png",[16,339,340],{},[119,341],{"alt":342,"src":343},"Företagshantering — lista med portföljbolag, typ, förvärvsdatum, land och aktiv status","\u002Fimages\u002Fportfolio\u002Fbizscree-companies.png",[11,345,144],{"id":143},[16,347,348,350],{},[33,349,149],{}," Vue 3, TypeScript, PrimeVue 4, Tailwind CSS 4, Pinia, hey-api (OpenAPI-klientgenerering)",[16,352,353,355],{},[33,354,155],{}," ASP.NET Core 10, C#, Entity Framework Core 10, PostgreSQL, SignalR, Serilog, QuestPDF, OpenAI",[16,357,358,361],{},[33,359,360],{},"Infrastruktur:"," Hetzner Object Storage (S3-kompatibel), cookie-baserad lösenordsfri auth",{"title":158,"searchDepth":159,"depth":159,"links":363},[364,365,366,367,368],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":81,"depth":159,"text":82},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"Bizscree AB","2023-10-01","Plattform som kopplar samman startups med inkubatorer, investerare och acceleratorer — en profil, många delningsnivåer.",{},"\u002Fportfolio\u002Fsv\u002Fbizscree",{"title":185,"description":371},"portfolio\u002Fsv\u002Fbizscree",[177,178,179,377,180,378,379],"postgresql","ai","saas","Y7rj9Q0d2Mwi5Ozxm_vqMx-7KwZYqVNjVte_PaD6_j4",{"id":382,"title":383,"body":384,"client":512,"date":513,"description":514,"extension":169,"featured":170,"meta":515,"navigation":170,"order":516,"path":517,"seo":518,"stem":519,"tags":520,"thumbnail":522,"__hash__":523},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fvensire.md","Vensire — Identifieraren av tillväxtbolag",{"type":8,"value":385,"toc":506},[386,388,391,394,397,399,455,457,463,469,471,479,484,494,500],[11,387,14],{"id":13},[16,389,390],{},"Vensire är en multi-tenant SaaS-plattform som hjälper regionala näringslivsutvecklare att identifiera svenska tillväxtföretag med störst potential att skapa framtidens arbetstillfällen. Istället för reaktiv näringslivsutveckling — där man reagerar på nyheter och tips — får användarna en datadriven radar över företagen i sin region.",[16,392,393],{},"Kärnan är en egenutvecklad klassificeringsalgoritm som analyserar fleråriga tidsserier av omsättning (Mkr) och antal anställda, inflationsjusterade och annualiserade, och placerar varje företag i en av fem kategorier: revitaliserade, svagt revitaliserade, konstant växande, stabila eller oidentifierade. Utöver kategoriseringen beräknas ett tillväxtbetyg 1–5, en lönsamhetsnivå 0–9 och signaler som synkroniserad extremtillväxt — mönster som kan tyda på fusioner eller förvärv.",[16,395,396],{},"Vi byggde hela systemet — klassificeringsalgoritmen, backend-API:et och Vue-SPA:n. Vi byggde även marknadssajten vensire.se i WordPress, och vi driftar och hostar applikationen själva.",[11,398,25],{"id":24},[27,400,401,407,413,419,425,431,437,443,449],{},[30,402,403,406],{},[33,404,405],{},"Tillväxtradarn"," — Kärnfunktionen: listar alla revitaliserade, konstant växande och stabila företag per kommun, bransch och storlek",[30,408,409,412],{},[33,410,411],{},"Klassificeringsalgoritm"," — Tiostegspipeline som identifierar stabila perioder, revitaliseringsperioder och konstant tillväxt i företagens historik",[30,414,415,418],{},[33,416,417],{},"Tillväxtbetyg & lönsamhet"," — Sammanvägda betyg 1–5 för tillväxt och 0–9 för lönsamhet",[30,420,421,424],{},[33,422,423],{},"Företagsdetaljer"," — Interaktiva tidslinjediagram som visar omsättning och anställda per år, med färgmarkerade perioder (revitalisering i grönt, stabila faser i gult)",[30,426,427,430],{},[33,428,429],{},"Filter & export"," — Filtrering per kommun, bransch (SNI-kod), storlek och revitaliseringsperiod, med Excel-export",[30,432,433,436],{},[33,434,435],{},"Företagsuppföljning"," — Notifikationer när företag byter VD eller ändrar klassificering",[30,438,439,442],{},[33,440,441],{},"Jämförelsevy"," — Jämför flera företag mot varandra",[30,444,445,448],{},[33,446,447],{},"Multi-tenant"," — Rollbaserad åtkomst med organisationer: Admin, OrganizationAdmin, OrganizationUser",[30,450,451,454],{},[33,452,453],{},"Import av externa data"," — Batch-importör för Retriever, Bisnode, SNI, koncerndata och mer",[11,456,115],{"id":114},[16,458,459],{},[119,460],{"alt":461,"src":462},"Revitaliserade företag — lista med filtrering per kommun, bransch och storlek, med tillväxt- och lönsamhetsbetyg","\u002Fimages\u002Fportfolio\u002Fvensire-list.png",[16,464,465],{},[119,466],{"alt":467,"src":468},"Företagsdetalj — A Society AB med tidslinjediagram som visar revitaliseringsperiod (grönt) och stabil fas (gult) över 2004–2021","\u002Fimages\u002Fportfolio\u002Fvensire-detail.png",[11,470,144],{"id":143},[16,472,473,475,476],{},[33,474,149],{}," Vue 3.4, TypeScript, Vite 5, Pinia, Tailwind CSS 3.4, HeadlessUI, ApexCharts, vee-validate, ",[308,477,478],{},"@microsoft\u002Fsignalr",[16,480,481,483],{},[33,482,155],{}," ASP.NET Core 8, C#, Entity Framework Core 8, PostgreSQL, ASP.NET Identity (cookie auth), AutoMapper, SignalR, Swashbuckle\u002FOpenAPI",[16,485,486,489,490,493],{},[33,487,488],{},"Algoritmbibliotek:"," Rent .NET 8-klassbibliotek (enda externa beroendet är ",[308,491,492],{},"OneOf",")",[16,495,496,499],{},[33,497,498],{},"Sekundär UI:"," Blazor WebAssembly för algoritmresultatjämförelse och manuell QA",[16,501,502,505],{},[33,503,504],{},"CI\u002FCD:"," GitHub Actions → SCP → systemd på bare-metal",{"title":158,"searchDepth":159,"depth":159,"links":507},[508,509,510,511],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"Vensire AB","2022-01-01","Multi-tenant SaaS för regional näringslivsutveckling — klassificerar svenska företag efter tillväxt och stabilitet via egenutvecklad algoritm.",{},3,"\u002Fportfolio\u002Fsv\u002Fvensire",{"title":383,"description":514},"portfolio\u002Fsv\u002Fvensire",[177,178,179,377,180,379,521],"analytics","\u002Fimages\u002Fportfolio\u002Fvensire-hero.png","lEH6CzCy67b1DRczvF1XXTGVmqU9Wn5of8WZgV_Sal0",{"id":525,"title":526,"body":527,"client":585,"date":586,"description":587,"extension":169,"featured":170,"meta":588,"navigation":170,"order":589,"path":590,"seo":591,"stem":592,"tags":593,"thumbnail":597,"__hash__":598},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fmillion-games.md","Million Games — Studio Management & Utveckling",{"type":8,"value":528,"toc":580},[529,531,534,538,564,566],[11,530,14],{"id":13},[16,532,533],{},"Xenolith AB har sedan 2023 levererat studio management till Million Games AB, med ansvar för utveckling och livscykelhantering av iGaming-produkter.",[11,535,537],{"id":536},"vad-vi-levererade","Vad vi levererade",[27,539,540,546,552,558],{},[30,541,542,545],{},[33,543,544],{},"Studio Management"," — Övergripande ansvar för ett team på ca 15 personer",[30,547,548,551],{},[33,549,550],{},"Produktutveckling"," — Slots, crash-spel och arkadstilsspel för kasino",[30,553,554,557],{},[33,555,556],{},"Teknisk arkitektur"," — Uppbyggnad av utvecklingsprocesser och teknisk stack",[30,559,560,563],{},[33,561,562],{},"Kvalitetssäkring"," — Implementering av teststrategier och CI\u002FCD-flöden",[11,565,144],{"id":143},[27,567,568,571,574,577],{},[30,569,570],{},".NET \u002F C#",[30,572,573],{},"TypeScript",[30,575,576],{},"PixiJS",[30,578,579],{},"Azure",{"title":158,"searchDepth":159,"depth":159,"links":581},[582,583,584],{"id":13,"depth":159,"text":14},{"id":536,"depth":159,"text":537},{"id":143,"depth":159,"text":144},"Million Games AB","2023-01-01","Hands-on teknisk ledning och utveckling av iGaming-produkter inklusive slots, crash-spel och arkadspel.",{},4,"\u002Fportfolio\u002Fsv\u002Fmillion-games",{"title":526,"description":587},"portfolio\u002Fsv\u002Fmillion-games",[594,177,179,595,596],"igaming","pixijs","management","\u002Fimages\u002Fportfolio\u002Fmillion-games-logo.png","00nau0xJ-vr7KoPmE4MNqfPLEwxbFluQgSLK0UjV3MM",{"id":600,"title":601,"body":602,"client":585,"date":709,"description":710,"extension":169,"featured":170,"meta":711,"navigation":170,"order":712,"path":713,"seo":714,"stem":715,"tags":716,"thumbnail":677,"__hash__":717},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fchicken-x-competition.md","Chicken X and Friends — Tävlingsplattform för mässor",{"type":8,"value":603,"toc":702},[604,606,609,611,655,659,670,672,678,684,686,691,696],[11,605,14],{"id":13},[16,607,608],{},"Inför mässorna tog Million Games fram en tävlingsstation där besökare fick spela Chicken X and Friends i 15 minuter och jaga toppen av leaderboarden. Vi byggde hela tävlingssystemet — registreringsformulär, spelsessionshantering, live-leaderboard och adminpanel — som samlade in deltagarnas resultat och kontaktuppgifter för prisutdelning och vidare uppföljning.",[11,610,25],{"id":24},[27,612,613,619,625,631,637,643,649],{},[30,614,615,618],{},[33,616,617],{},"Registrering"," — Namn, företag och e-post med inbyggd validering och GDPR-samtycke för marknadsföring",[30,620,621,624],{},[33,622,623],{},"Spelintegration"," — Skapar automatiskt spelsessioner via Million Games launcher-API",[30,626,627,630],{},[33,628,629],{},"Poänghämtning"," — Bakgrundspolling hämtar resultat direkt från spelets API",[30,632,633,636],{},[33,634,635],{},"Live-leaderboard"," — Realtidsrankning med paginering och automatisk uppdatering",[30,638,639,642],{},[33,640,641],{},"Dubblettskydd"," — Samma e-post omdirigerar till aktiv session istället för att skapa en ny",[30,644,645,648],{},[33,646,647],{},"Adminpanel"," — Lösenordsskyddad vy för att hantera, sortera, redigera och radera bidrag",[30,650,651,654],{},[33,652,653],{},"Självständigt bygge"," — En enda .NET-binär som serverar både API och frontend, enkel att driftsätta på en mässdator",[11,656,658],{"id":657},"tävlingsreglerna","Tävlingsreglerna",[27,660,661,664,667],{},[30,662,663],{},"15 minuter att tävla",[30,665,666],{},"De 10 sista rundorna räknas mot totalpoängen",[30,668,669],{},"Högsta poäng vinner!",[11,671,115],{"id":114},[16,673,674],{},[119,675],{"alt":676,"src":677},"Registreringssida med Million Games-logga, titeln Chicken X and Friends och ett formulär med namn, företag, e-post och GDPR-samtycke — på en top-down-bakgrund från spelet","\u002Fimages\u002Fportfolio\u002Fchicken-x-competition-register.png",[16,679,680],{},[119,681],{"alt":682,"src":683},"Live-leaderboard med topplacerade spelare, företag och poäng ovanpå samma spelbakgrund som registreringssidan","\u002Fimages\u002Fportfolio\u002Fchicken-x-competition-leaderboard.png",[11,685,144],{"id":143},[16,687,688,690],{},[33,689,149],{}," Vue 3, TypeScript, Nuxt UI 4, Tailwind CSS 4, Vite, Valibot",[16,692,693,695],{},[33,694,155],{}," .NET 9, C#, Entity Framework Core, SQLite",[16,697,698,701],{},[33,699,700],{},"Deploy:"," Self-contained .NET-binär — ingen extern databas eller runtime krävs på mässdatorn",{"title":158,"searchDepth":159,"depth":159,"links":703},[704,705,706,707,708],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":657,"depth":159,"text":658},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"2025-11-01","Mässtävling för Million Games-spelet Chicken X and Friends — registrering, live-leaderboard och adminpanel i ett enda självständigt bygge.",{},5,"\u002Fportfolio\u002Fsv\u002Fchicken-x-competition",{"title":601,"description":710},"portfolio\u002Fsv\u002Fchicken-x-competition",[178,179,177,594],"iolUPDkqCh55t5zOCnqNtwfSy2ah3cNy_eEvxFmrH1k",{"id":719,"title":720,"body":721,"client":850,"date":851,"description":852,"extension":169,"featured":170,"meta":853,"navigation":170,"order":854,"path":855,"seo":856,"stem":857,"tags":858,"thumbnail":860,"__hash__":861},"portfolio_sv\u002Fportfolio\u002Fsv\u002Ftranslator-tool.md","TranslatorTool — AI-driven iGaming-lokalisering",{"type":8,"value":722,"toc":844},[723,725,728,731,733,798,802,828,830],[11,724,14],{"id":13},[16,726,727],{},"TranslatorTool är ett internt verktyg vi byggt för att automatisera lokalisering av iGaming-innehåll. Givet en uppsättning engelska källfiler (JSON eller TXT) översätter verktyget innehållet till upp till 37 språk via OpenAI Responses API, med inbyggd kvalitetskontroll, översättningsminne och en branschanpassad terminologiordlista som håller jackpott, scatter och liknande termer konsekventa över hela spelbibliotek.",[16,729,730],{},"Verktyget körs lokalt via en interaktiv meny — du väljer språk, justerar resoneringsnivå (low\u002Fmedium\u002Fhigh), parallellitet och om QA-validering ska köras — och resultatet sparas i en Output-mapp redo att paketeras in i klientens spel.",[11,732,25],{"id":24},[27,734,735,741,747,753,759,765,771,777],{},[30,736,737,740],{},[33,738,739],{},"37 språk"," — Täckning för globala kasinooperationer, från svenska och spanska till bulgariska och japanska",[30,742,743,746],{},[33,744,745],{},"Multi-format"," — Hanterar både JSON och TXT med intelligent strukturbevarande",[30,748,749,752],{},[33,750,751],{},"Parallell bearbetning"," — Översätter flera filer och språk samtidigt (5–10x snabbare än sekventiellt)",[30,754,755,758],{},[33,756,757],{},"Översättningsminne"," — Återanvänder tidigare översättningar vid 85%+ likhet, håller terminologin konsekvent och sänker API-kostnaderna",[30,760,761,764],{},[33,762,763],{},"Kvalitetskontroll"," — Strukturerad AI-driven QA med poängsättning 0–100, felklassificering (kritisk\u002Fmajor\u002Fminor) och automatisk omtest med feedback",[30,766,767,770],{},[33,768,769],{},"Terminologiordlista"," — Inbyggd iGaming-glossary med föredragna översättningar för branschtermer",[30,772,773,776],{},[33,774,775],{},"Smart återhämtning"," — Återupptar avbrutna sessioner via filhash-baserad översättningshistorik",[30,778,779,782,783,786,787,786,790,793,794,797],{},[33,780,781],{},"Placeholder-säkerhet"," — Bevarar variabler som ",[308,784,785],{},"{{VARIABLE}}",", ",[308,788,789],{},"::VARIABLE::",[308,791,792],{},"%s","\u002F",[308,795,796],{},"%d",", HTML-taggar och attribut korrekt",[11,799,801],{"id":800},"igaming-specifika-finesser","iGaming-specifika finesser",[27,803,804,810,816,822],{},[30,805,806,809],{},[33,807,808],{},"Social casino-läge"," — Specialvariant (\"ex\" — English Social) som automatiskt byter ut spelterminologi mot social-casino-vänliga ord: balance → coins, bet → play\u002Fspin, payout → win",[30,811,812,815],{},[33,813,814],{},"Regulatoriska hänsyn"," — Separat hantering av termer och ton för olika reglerade marknader",[30,817,818,821],{},[33,819,820],{},"UI-begränsningar"," — Tar hänsyn till maxlängd för knapptexter och tooltip-utrymme",[30,823,824,827],{},[33,825,826],{},"Branschtermer"," — Konsekvent översättning av free spins, wild, scatter, multiplier och liknande över hela leveranser",[11,829,144],{"id":143},[27,831,832,835,838,841],{},[30,833,834],{},".NET 9 \u002F C#",[30,836,837],{},"OpenAI Responses API (GPT-5.2)",[30,839,840],{},"Interaktiv konsollmeny",[30,842,843],{},"Lokal exekvering — inga server- eller databasberoenden",{"title":158,"searchDepth":159,"depth":159,"links":845},[846,847,848,849],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":800,"depth":159,"text":801},{"id":143,"depth":159,"text":144},"Xenolith AB (eget verktyg)","2025-06-01","Internt verktyg för automatiserad lokalisering av iGaming-innehåll till 37 språk via OpenAI Responses API — med översättningsminne och kvalitetskontroll.",{},6,"\u002Fportfolio\u002Fsv\u002Ftranslator-tool",{"title":720,"description":852},"portfolio\u002Fsv\u002Ftranslator-tool",[177,378,594,859],"localization","\u002Fimages\u002Fportfolio\u002Ftranslator-tool-hero.jpg","MvS467NdmzPsAswm469AE-gxkw26i_LDcAwSkQyk69Q",{"id":863,"title":864,"body":865,"client":991,"date":992,"description":993,"extension":169,"featured":170,"meta":994,"navigation":170,"order":995,"path":996,"seo":997,"stem":998,"tags":999,"thumbnail":953,"__hash__":1001},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fvision-backoffice.md","Vision Backoffice — Kontrollcenter för iGaming-operatörer",{"type":8,"value":866,"toc":984},[867,869,872,875,877,915,917,920,946,948,954,960,966,972,974,979],[11,868,14],{"id":13},[16,870,871],{},"Vision Backoffice (VBO) är det administrativa kontrollcentret som följer med Reelsofts Vision-produkter (Vision RGS och Vision Link). Plattformen ger onlinecasinooperatörer full insyn och kontroll över sin spelverksamhet — från realtidsdashboards och detaljerad analys till anpassade rapporter och konfiguration av spel, operatörer och leverantörer.",[16,873,874],{},"Vi byggde hela systemet — både frontend-SPA:n och Java-baserat API — för Reelsoft.",[11,876,25],{"id":24},[27,878,879,885,891,897,903,909],{},[30,880,881,884],{},[33,882,883],{},"Dashboard"," — Realtidsöversikt med jämförelser över dag, månad och föregående period: spelare, rundor, insatser, vinster, GGR och RTP",[30,886,887,890],{},[33,888,889],{},"Diagram & analys"," — 30-dagars trendgrafer per metric, filtrerbara per operatör",[30,892,893,896],{},[33,894,895],{},"Anpassade rapporter"," — Prestandarapporter segmenterade per operatör, leverantör, spel, varumärke och land",[30,898,899,902],{},[33,900,901],{},"Konfiguration"," — Hantera spel, operatörer, leverantörer, valutor, RTP-versioner och marknadsinställningar",[30,904,905,908],{},[33,906,907],{},"Administration"," — Rollbaserad åtkomst, användarhantering och systeminställningar",[30,910,911,914],{},[33,912,913],{},"Globalt sök"," — Direktsök på spelare, rundor och transaktions-ID:n",[11,916,82],{"id":81},[16,918,919],{},"VBO är byggt som en ren SPA + API-arkitektur med strikt separation mellan frontend och backend:",[27,921,922,928,934,940],{},[30,923,924,927],{},[33,925,926],{},"Modulär Vue 3-frontend"," — Komponentbaserad arkitektur med stöd för både ljust och mörkt läge",[30,929,930,933],{},[33,931,932],{},"Java REST-API"," — Backend designad för att hantera stora mängder speltransaktioner",[30,935,936,939],{},[33,937,938],{},"Operatörsmedveten filtrering"," — All data kan skivas per operatör för multi-tenant-scenarier",[30,941,942,945],{},[33,943,944],{},"Realtidsnära dashboards"," — Snabba aggregeringar för dagliga och månatliga KPI:er",[11,947,115],{"id":114},[16,949,950],{},[119,951],{"alt":952,"src":953},"Vision Backoffice dashboard — spelare, rundor, insatser, GGR och RTP över dag, månad och föregående period","\u002Fimages\u002Fportfolio\u002Fvision-backoffice-dashboard.png",[16,955,956],{},[119,957],{"alt":958,"src":959},"30-dagars trenddiagram för insatser, vinster, GGR, spelare, rundor och RTP","\u002Fimages\u002Fportfolio\u002Fvision-backoffice-charts.png",[16,961,962],{},[119,963],{"alt":964,"src":965},"Operatörskonfiguration — lista över operatörer med RTP-version, marknadskontroller och buy feature-inställningar","\u002Fimages\u002Fportfolio\u002Fvision-backoffice-config.png",[16,967,968],{},[119,969],{"alt":970,"src":971},"Prestandarapport segmenterad per leverantör med detaljerade KPI:er","\u002Fimages\u002Fportfolio\u002Fvision-backoffice-reports.png",[11,973,144],{"id":143},[16,975,976,978],{},[33,977,149],{}," Vue 3, TypeScript, Pinia, Vite",[16,980,981,983],{},[33,982,155],{}," Java, REST API",{"title":158,"searchDepth":159,"depth":159,"links":985},[986,987,988,989,990],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":81,"depth":159,"text":82},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"Reelsoft (Vision RGS)","2024-03-01","Administrativ kontrollpanel för Reelsofts Vision iGaming-plattform — dashboards, analys, rapporter och operatörskonfiguration.",{},7,"\u002Fportfolio\u002Fsv\u002Fvision-backoffice",{"title":864,"description":993},"portfolio\u002Fsv\u002Fvision-backoffice",[178,179,1000,594,379,596],"java","w4uu-jjzVk5T9oUSyjpEM8IWEXJ1qieVQQXRMjHmpoM",{"id":1003,"title":1004,"body":1005,"client":1105,"date":513,"description":1106,"extension":169,"featured":170,"meta":1107,"navigation":170,"order":1108,"path":1109,"seo":1110,"stem":1111,"tags":1112,"thumbnail":1075,"__hash__":1114},"portfolio_sv\u002Fportfolio\u002Fsv\u002Finflyttarservice.md","Inflyttarservice — Ärendehantering för kommuner",{"type":8,"value":1006,"toc":1099},[1007,1009,1012,1014,1062,1064,1070,1076,1081,1083,1088,1093],[11,1008,14],{"id":13},[16,1010,1011],{},"Inflyttarservice är en ärendehanteringsplattform byggd för Skaraborgs Kommunalförbund. Systemet hjälper handläggare att följa sökande från första registrering till lyckad etablering, med kommunavgränsad åtkomstkontroll, automatiserade arbetsflöden och en publik ansökningsportal.",[11,1013,25],{"id":24},[27,1015,1016,1022,1028,1033,1039,1045,1051,1057],{},[30,1017,1018,1021],{},[33,1019,1020],{},"Ärendelivscykel"," — Spåra ärenden genom Ny, Pågående, Avslutad, Inaktiv och Avbruten med handläggartilldelning, filuppladdning, kommentarer och länkade sökande",[30,1023,1024,1027],{},[33,1025,1026],{},"Publik ansökningsportal"," — Inbäddningsbara, kommunspecifika formulär med konfigurerbar fältsynlighet",[30,1029,1030,1032],{},[33,1031,883],{}," — Realtidsstatistik, aktivitetsflöde och historiska trenddiagram",[30,1034,1035,1038],{},[33,1036,1037],{},"Rapporter och export"," — Filtrera på kommun, status, datumintervall med mera; exportera till Excel",[30,1040,1041,1044],{},[33,1042,1043],{},"Rollbaserad åtkomstkontroll"," — Fyra roller (Superadmin, Teamlead, Handläggare, Sökande) med kommunavgränsad dataisolering",[30,1046,1047,1050],{},[33,1048,1049],{},"Dynamisk formulärbyggare"," — Anpassa publika formulär, växla fält, sätt standardvärden och kopiera inbäddningskod",[30,1052,1053,1056],{},[33,1054,1055],{},"Bakgrundsautomatisering"," — Hangfire-jobb hanterar inaktivitetsdetektering, filrensning och schemalagda påminnelser",[30,1058,1059,1061],{},[33,1060,245],{}," — SignalR push-notifikationer och e-postvarningar vid tilldelning, kommentarer och statusändringar",[11,1063,115],{"id":114},[16,1065,1066],{},[119,1067],{"alt":1068,"src":1069},"Inflyttarservice inloggning","\u002Fimages\u002Fportfolio\u002Finflyttarservice-login.jpg",[16,1071,1072],{},[119,1073],{"alt":1074,"src":1075},"Inflyttarservice Dashboard","\u002Fimages\u002Fportfolio\u002Finflyttarservice-dashboard.png",[16,1077,1078],{},[119,1079],{"alt":1049,"src":1080},"\u002Fimages\u002Fportfolio\u002Finflyttarservice-forms.png",[11,1082,144],{"id":143},[16,1084,1085,1087],{},[33,1086,155],{}," ASP.NET Core, C#, Entity Framework Core, PostgreSQL, Hangfire, SignalR",[16,1089,1090,1092],{},[33,1091,149],{}," Vue 2.7, Tailwind CSS, Axios",[16,1094,1095,1098],{},[33,1096,1097],{},"Övrigt:"," MailKit (SMTP), ClosedXML (Excel), GitHub Actions CI\u002FCD",{"title":158,"searchDepth":159,"depth":159,"links":1100},[1101,1102,1103,1104],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"Skaraborgs Kommunalförbund","Ärendehanteringsplattform för svenska kommuner som stöttar personer som flyttar till området — med livscykelhantering, automatiserade arbetsflöden och publik ansökningsportal.",{},8,"\u002Fportfolio\u002Fsv\u002Finflyttarservice",{"title":1004,"description":1106},"portfolio\u002Fsv\u002Finflyttarservice",[177,178,377,180,1113],"hangfire","9yv65Gp3I5FovSr0BktTY1CfHRb5GN7D-qhHxOZ4d0o",{"id":1116,"title":1117,"body":1118,"client":1220,"date":1221,"description":1222,"extension":169,"featured":170,"meta":1223,"navigation":170,"order":1224,"path":1225,"seo":1226,"stem":1227,"tags":1228,"thumbnail":1189,"__hash__":1231},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fsiguru.md","Siguru — Gamifierad cybersäkerhetsutbildning",{"type":8,"value":1119,"toc":1214},[1120,1122,1125,1128,1132,1182,1184,1190,1196,1202,1204,1209],[11,1121,14],{"id":13},[16,1123,1124],{},"Siguru är en gamifierad cybersäkerhetsplattform som gör det engagerande och effektivt att lära sig om IT-säkerhet. Genom interaktiva kort och spelmekanik lär sig användare om vanliga cyberhot på ett minnesvärt sätt.",[16,1126,1127],{},"Plattformen innehåller över 127 förpopulerade kort — 102 kunskapskort om cybersäkerhet i tre svårighetsnivåer och 25 handlingskort med spelmekanik. Allt innehåll granskas av experter och finns tillgängligt på engelska, svenska och tyska.",[11,1129,1131],{"id":1130},"funktioner","Funktioner",[27,1133,1134,1140,1146,1152,1158,1164,1170,1176],{},[30,1135,1136,1139],{},[33,1137,1138],{},"Interaktiva kunskapskort"," — Cybersäkerhetsinnehåll i tre svårighetsgrader med attackvägar och skyddsmetoder",[30,1141,1142,1145],{},[33,1143,1144],{},"Handlingskort"," — Spelmekanik som simulerar verkliga scenarier (Före, Försvar, Under)",[30,1147,1148,1151],{},[33,1149,1150],{},"Organisationsspårning"," — Unika 2-teckenkoder per organisation, realtidsdashboard med live-aktivitet, statistik per språk och kategori, CSV-export",[30,1153,1154,1157],{},[33,1155,1156],{},"GDPR-kompatibel"," — All datainsamling är anonymiserad",[30,1159,1160,1163],{},[33,1161,1162],{},"Flerspråkigt stöd"," — Engelska, svenska och tyska med AI-stödd översättning och expertgranskning",[30,1165,1166,1169],{},[33,1167,1168],{},"QR-koder"," — Skanna ett kort, ange organisationskod och börja lära — enkel onboarding",[30,1171,1172,1175],{},[33,1173,1174],{},"Dashboard med statistik"," — Realtidsvy över visningar, populära kort och aktivitet per språk",[30,1177,1178,1181],{},[33,1179,1180],{},"Multimedia"," — Stöd för text, ljud och video i varje kort",[11,1183,115],{"id":114},[16,1185,1186],{},[119,1187],{"alt":1188,"src":1189},"Siguru Dashboard — statistik och toppkort","\u002Fimages\u002Fportfolio\u002Fsiguru-dashboard.png",[16,1191,1192],{},[119,1193],{"alt":1194,"src":1195},"Kortbibliotek med filtrering","\u002Fimages\u002Fportfolio\u002Fsiguru-cards.png",[16,1197,1198],{},[119,1199],{"alt":1200,"src":1201},"Adminpanel med QR-koder och kortlänkar","\u002Fimages\u002Fportfolio\u002Fsiguru-admin.png",[11,1203,144],{"id":143},[16,1205,1206,1208],{},[33,1207,149],{}," Vue 3, TypeScript, Tailwind CSS 4, Pinia, Vite",[16,1210,1211,1213],{},[33,1212,155],{}," ASP.NET Core 9.0, C#, Entity Framework Core, SQLite, Swagger\u002FOpenAPI",{"title":158,"searchDepth":159,"depth":159,"links":1215},[1216,1217,1218,1219],{"id":13,"depth":159,"text":14},{"id":1130,"depth":159,"text":1131},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"Siguru (eget projekt med Högskolan i Skövde)","2024-01-01","En gamifierad utbildningsplattform som lär organisationer om cybersäkerhet genom interaktiva kort, flerspråkigt innehåll och spelmekanik.",{},9,"\u002Fportfolio\u002Fsv\u002Fsiguru",{"title":1117,"description":1222},"portfolio\u002Fsv\u002Fsiguru",[177,178,179,1229,1230],"cybersecurity","gamification","cpAa26HraRzQojPy4H1TvD_rR8kWYVtcpa3pvCr_N7s",{"id":1233,"title":1234,"body":1235,"client":1356,"date":1357,"description":1358,"extension":169,"featured":170,"meta":1359,"navigation":170,"order":1360,"path":1361,"seo":1362,"stem":1363,"tags":1364,"thumbnail":1366,"__hash__":1367},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fiodesk.md","IOdesk — Allt-i-ett kundtjänst",{"type":8,"value":1236,"toc":1348},[1237,1239,1242,1245,1249,1252,1255,1257,1295,1299,1302,1311,1314,1316,1322,1328,1334,1336],[11,1238,14],{"id":13},[16,1240,1241],{},"IOdesk är Xenolith AB:s egna SaaS-produkt — en allt-i-ett kundtjänstplattform med AI-stöd. Bygg kunskapsbaser, guidea användare med självbetjäningsverktyg, chatta i realtid och hantera e-postsupport — allt från en och samma plats.",[16,1243,1244],{},"Målet: minska supportbelastningen för ert team och ge era användare en bättre upplevelse.",[11,1246,1248],{"id":1247},"lydia-ai-driven-självbetjäning","Lydia — AI-driven självbetjäning",[16,1250,1251],{},"IOdesks inbyggda AI-agent Lydia hjälper kunder att hjälpa sig själva. Hon analyserar frågor, ger svar baserade på tidigare kundinteraktioner och hanterar repetitiva frågor automatiskt — på kundens eget språk, oavsett om det är svenska, engelska eller något helt annat.",[16,1253,1254],{},"Tre av fyra personer föredrar att lösa problem på egen hand. Lydia gör det möjligt.",[11,1256,1131],{"id":1130},[27,1258,1259,1265,1271,1277,1283,1289],{},[30,1260,1261,1264],{},[33,1262,1263],{},"Kunskapsbas"," — Skapa guider och artiklar så att användare hittar svar själva",[30,1266,1267,1270],{},[33,1268,1269],{},"Livechatt med självbetjäning"," — En rad kod för att lägga till chatten på er webbplats. Lydia hjälper kunden direkt eller identifierar problemet innan ni tar över",[30,1272,1273,1276],{},[33,1274,1275],{},"Delad inkorg"," — Samla all inkommande e-post från kunder på ett ställe",[30,1278,1279,1282],{},[33,1280,1281],{},"Ärendehantering"," — Strukturerad hantering av supportärenden via e-post och formulär",[30,1284,1285,1288],{},[33,1286,1287],{},"Kontaktformulär & FAQ-widgets"," — Inbäddade verktyg för era webbplatser",[30,1290,1291,1294],{},[33,1292,1293],{},"Flerspråkig AI"," — Automatisk hjälp oavsett kundens språk",[11,1296,1298],{"id":1297},"kundcase-graphic-powers-ab","Kundcase: Graphic Powers AB",[16,1300,1301],{},"Graphic Powers AB, ett svenskt mjukvaruföretag med kunder över hela världen, behövde ett supportsystem som kunde svara på frågor dygnet runt.",[1303,1304,1305],"blockquote",{},[16,1306,1307,1308],{},"\"IOdesks inbyggda AI-agent Lydia hjälper våra kunder att snabbt hitta svar på vanliga frågor, utan att vi behöver göra något. IOdesk hjälper oss dagligen genom att samla alla supportärenden i ett system och hantera en stor del av dem automatiskt.\" — ",[33,1309,1310],{},"Mats Löfberg, VD",[16,1312,1313],{},"Tack vare att Lydia alltid finns tillgänglig har kundnöjdheten ökat — både för att kunder får svar direkt, och för att teamet nu har mer tid att besvara komplicerade frågor mer grundligt.",[11,1315,115],{"id":114},[16,1317,1318],{},[119,1319],{"alt":1320,"src":1321},"IOdesk Dashboard","\u002Fimages\u002Fportfolio\u002Fiodesk-dashboard.jpg",[16,1323,1324],{},[119,1325],{"alt":1326,"src":1327},"IOdesk Chatt med Lydia AI","\u002Fimages\u002Fportfolio\u002Fiodesk-chat.jpg",[16,1329,1330],{},[119,1331],{"alt":1332,"src":1333},"IOdesk Delad inkorg","\u002Fimages\u002Fportfolio\u002Fiodesk-inbox.png",[11,1335,144],{"id":143},[27,1337,1338,1341,1343,1345],{},[30,1339,1340],{},"Vue.js",[30,1342,570],{},[30,1344,579],{},[30,1346,1347],{},"AI\u002FML-modeller (NLP, flerspråkig)",{"title":158,"searchDepth":159,"depth":159,"links":1349},[1350,1351,1352,1353,1354,1355],{"id":13,"depth":159,"text":14},{"id":1247,"depth":159,"text":1248},{"id":1130,"depth":159,"text":1131},{"id":1297,"depth":159,"text":1298},{"id":114,"depth":159,"text":115},{"id":143,"depth":159,"text":144},"Xenolith AB (eget projekt)","2019-06-01","Allt-i-ett kundtjänstplattform som minskar supportbelastningen och ger en bättre upplevelse för era användare.",{},10,"\u002Fportfolio\u002Fsv\u002Fiodesk",{"title":1234,"description":1358},"portfolio\u002Fsv\u002Fiodesk",[379,178,378,177,1365],"azure","\u002Fimages\u002Fportfolio\u002Fiodesk-cover.jpg","kMmEGmxzFr9ULLSYXLSZeFf8jxCCYcYxd6XqeQBj9cM",{"id":1369,"title":1370,"body":1371,"client":1430,"date":1431,"description":1432,"extension":169,"featured":170,"meta":1433,"navigation":170,"order":1434,"path":1435,"seo":1436,"stem":1437,"tags":1438,"thumbnail":1441,"__hash__":1442},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fgraphic-powers.md","Graphic Powers — Webb, Administration & Licenshantering",{"type":8,"value":1372,"toc":1421},[1373,1375,1378,1381,1385,1390,1393,1397,1400,1404,1407,1409],[11,1374,14],{"id":13},[16,1376,1377],{},"Graphic Powers AB är ett svenskt mjukvaruföretag som utvecklar vektorgrafikverktyg för grafiker, skyltmakare, gravörer och tryckverkstäder världen över. Deras huvudprodukt Graphic Tracer omvandlar lågupplösta bilder till skalbara vektorgrafik med hjälp av egenutvecklad teknologi som SensEdge och FontEye.",[16,1379,1380],{},"Xenolith AB har byggt och underhåller tre centrala system åt Graphic Powers:",[11,1382,1384],{"id":1383},"vad-vi-levererat","Vad vi levererat",[1386,1387,1389],"h3",{"id":1388},"webbplats-butik-graphicpowerscom","Webbplats & butik — graphicpowers.com",[16,1391,1392],{},"Den publika webbplatsen med integrerad butik för Graphic Tracer. Kunder kan köpa licenser, teckna prenumerationer och hantera sina konton — allt kopplat till Stripe för smidig betalningshantering med stöd för månadsprenumerationer, årsplaner och livstidslicenser.",[1386,1394,1396],{"id":1395},"webbaserat-administrationssystem","Webbaserat administrationssystem",[16,1398,1399],{},"Administrationssystem för Graphic Powers team att hantera kunder, licenser, försäljning, supportärenden och affärsdata. Ger teamet full översikt och kontroll över hela kundlivscykeln och licensflödet.",[1386,1401,1403],{"id":1402},"licensieringssystem","Licensieringssystem",[16,1405,1406],{},"Komplett licenshantering för Graphic Tracer — från provperioder och månadsabonnemang till livstidslicenser. Hanterar aktivering, validering och uppgraderingar för kunder globalt.",[11,1408,144],{"id":143},[27,1410,1411,1413,1416,1418],{},[30,1412,570],{},[30,1414,1415],{},"Vue.js \u002F TypeScript",[30,1417,579],{},[30,1419,1420],{},"SQL Server",{"title":158,"searchDepth":159,"depth":159,"links":1422},[1423,1424,1429],{"id":13,"depth":159,"text":14},{"id":1383,"depth":159,"text":1384,"children":1425},[1426,1427,1428],{"id":1388,"depth":516,"text":1389},{"id":1395,"depth":516,"text":1396},{"id":1402,"depth":516,"text":1403},{"id":143,"depth":159,"text":144},"Graphic Powers AB","2018-06-01","Webbplats med Stripe-integrerad butik, webbaserat administrationssystem och licensieringssystem för ett svenskt mjukvaruföretag med globala kunder.",{},11,"\u002Fportfolio\u002Fsv\u002Fgraphic-powers",{"title":1370,"description":1432},"portfolio\u002Fsv\u002Fgraphic-powers",[177,178,179,1365,1439,1440],"stripe","licensing","\u002Fimages\u002Fportfolio\u002Fgraphic-powers-website.png","VBhXZ9D6DXbxRhPodeFMXXlSggZF43otTCmqVZzM7tA",{"id":1444,"title":1445,"body":1446,"client":1581,"date":1357,"description":1582,"extension":169,"featured":170,"meta":1583,"navigation":170,"order":1584,"path":1585,"seo":1586,"stem":1587,"tags":1588,"thumbnail":1589,"__hash__":1590},"portfolio_sv\u002Fportfolio\u002Fsv\u002Fwebsec-assistant.md","WebSec Assistant — Säkerhetsmedvetenhet i webbläsaren",{"type":8,"value":1447,"toc":1576},[1448,1450,1461,1464,1467,1469,1533,1535],[11,1449,14],{"id":13},[16,1451,1452,1453,1456,1457,1460],{},"WebSec Assistant är ett Firefox-tillägg byggt för att höja den vardagliga säkerhetsmedvetenheten inom en organisation. I stället för att utbilda användare en gång om året och hoppas att det fastnar sitter tillägget bredvid deras surfande och gör två saker samtidigt: det ",[33,1454,1455],{},"skyddar"," dem i stunden — blockerar kända skadliga domäner, flaggar svaga lösenord, varnar för nätfiskekänsliga sidor — och ",[33,1458,1459],{},"lär upp"," dem i små, kontextnära doser genom att öppna ämnesspecifika guider med quiz och valfri ljudberättelse precis när en risksituation uppstår, så att förklaringen når fram medan sammanhanget är färskt.",[16,1462,1463],{},"Varje organisation kör egna regler mot en företagsspecifik backend, så samma tillägg kan rullas ut till olika kunder utan att byggas om.",[16,1465,1466],{},"Projektet lyftes fram av IVA (Kungl. Ingenjörsvetenskapsakademien) som ett forskningsinitiativ med kommersiell potential och samhällsnytta.",[11,1468,25],{"id":24},[27,1470,1471,1481,1487,1497,1503,1509,1515,1521,1527],{},[30,1472,1473,1476,1477,1480],{},[33,1474,1475],{},"Domänblockering"," — Kända skadliga URL:er fångas upp via WebExtension-API:et ",[308,1478,1479],{},"webRequest"," och omdirigeras till en kategoriserad varningssida (skadlig kod, nätfiske, spam eller falska nyheter). Farliga kategorier kräver ett aktivt val för att fortsätta",[30,1482,1483,1486],{},[33,1484,1485],{},"Sessionsbypass"," — Användaren kan vitlista en domän enbart för aktuell flik, eller permanent, direkt från varningssidan — eller hoppa vidare till matchande lärandeguide",[30,1488,1489,1492,1493,1496],{},[33,1490,1491],{},"Lösenordsstyrke-tooltip"," — När ett lösenordsfält får fokus visas en in-page-tooltip driven av ",[308,1494,1495],{},"zxcvbn"," som poängsätter lösenordet på en femgradig skala med färgkodad stapel och kan skjuta tillbaka det testade värdet in i formuläret",[30,1498,1499,1502],{},[33,1500,1501],{},"Nätfiskepopup på webbmail"," — På vanliga webbmail-domäner visas en påminnelse om varningstecken för nätfiske precis när användaren är som mest sårbar",[30,1504,1505,1508],{},[33,1506,1507],{},"Extern länkvarning"," — Navigering i ny flik till externa adresser kan flaggas så att användaren inte tyst skickas någonstans oväntat",[30,1510,1511,1514],{},[33,1512,1513],{},"Interaktiva guider"," — Lösenord, nätfiske, bedrägeri och falska nyheter levereras som korta bildspel med flervals-quiz, direkt visuell feedback, Howler-baserad ljudberättelse och en avslutande resultatskärm",[30,1516,1517,1520],{},[33,1518,1519],{},"Manuell uppdatering av blockeringslista"," — Ettklicks-synk mot organisationens backend, plus en synlig tidsstämpel för senaste lyckade uppdatering",[30,1522,1523,1526],{},[33,1524,1525],{},"Tvåspråkigt UI"," — Fullständiga översättningar för svenska och engelska, inklusive metadata för tilläggsbutiken",[30,1528,1529,1532],{},[33,1530,1531],{},"Konfigurerbart"," — Varje skyddsfunktion (lösenordstooltip, domänblockering, extern länkvarning, nätfiskepopup) kan slås av och på separat",[11,1534,144],{"id":143},[27,1536,1537,1552,1558,1567],{},[30,1538,1539,1542,1543,786,1545,786,1548,1551],{},[33,1540,1541],{},"Tillägget:"," Vue, WebExtension-API:er (",[308,1544,1479],{},[308,1546,1547],{},"storage",[308,1549,1550],{},"tabs","), Shadow DOM-styling (värdsidans CSS läcker inte in), zxcvbn (lösenordspoäng), Howler (ljudberättelse per slide)",[30,1553,1554,1557],{},[33,1555,1556],{},"Arkitektur:"," Långkörande bakgrundsskript äger blockerings- och vitlistedata och pratar med backend; content-skript renderar UI inuti Shadow DOM; popup, guide och varning är tre separata Vue-entrypoints",[30,1559,1560,1562,1563,1566],{},[33,1561,155],{}," Företagsspecifikt REST-API på ",[308,1564,1565],{},"ubarso.xenolith.se"," för blockeringslista per kund",[30,1568,1569,1572,1573,493],{},[33,1570,1571],{},"Manifest V2",", Firefox först (Gecko add-on-id ",[308,1574,1575],{},"websecassistant@xenolith.se",{"title":158,"searchDepth":159,"depth":159,"links":1577},[1578,1579,1580],{"id":13,"depth":159,"text":14},{"id":24,"depth":159,"text":25},{"id":143,"depth":159,"text":144},"Xenolith AB (forskningsprojekt)","Firefox-tillägg som skyddar användare mot nätfiske, svaga lösenord och bedrägeri — och förklarar varför, med interaktiva guider och quiz.",{},12,"\u002Fportfolio\u002Fsv\u002Fwebsec-assistant",{"title":1445,"description":1582},"portfolio\u002Fsv\u002Fwebsec-assistant",[1229,178,1230],"\u002Fimages\u002Fportfolio\u002Fwebsec-assistant-hero.jpg","hKnPaKbbCb6_bUDXhYiUPz5GjYRUpqwIsEIsmghcHuM",1776248144557]