[{"data":1,"prerenderedAt":174},["ShallowReactive",2],{"portfolio-en-vensire":3},{"id":4,"title":5,"body":6,"client":154,"date":155,"description":156,"extension":157,"featured":158,"meta":159,"navigation":158,"order":160,"path":161,"seo":162,"stem":163,"tags":164,"thumbnail":172,"__hash__":173},"portfolio_en\u002Fportfolio\u002Fen\u002Fvensire.md","Vensire — The identifier of growth companies",{"type":7,"value":8,"toc":146},"minimark",[9,14,18,21,24,28,87,91,98,104,108,118,124,134,140],[10,11,13],"h2",{"id":12},"overview","Overview",[15,16,17],"p",{},"Vensire is a multi-tenant SaaS platform that helps regional business-development professionals identify Swedish growth companies with the greatest potential to create future jobs. Instead of reactive development — responding to news and tips — users get a data-driven radar over the companies in their region.",[15,19,20],{},"At the core is a proprietary classification algorithm that analyzes multi-year time series of revenue (Mkr) and employee count, inflation-adjusted and annualized, placing each company into one of five categories: revitalized, weakly revitalized, constantly growing, stable, or unclassified. On top of the classification it computes a 1–5 growth rating, a 0–9 profitability level, and surfaces patterns like synchronized extreme growth — signals that may indicate mergers or acquisitions.",[15,22,23],{},"We built the whole system — the classification algorithm, the backend API, and the Vue SPA. We also built the marketing site vensire.se in WordPress, and we handle hosting and operations for the application ourselves.",[10,25,27],{"id":26},"what-the-system-does","What the system does",[29,30,31,39,45,51,57,63,69,75,81],"ul",{},[32,33,34,38],"li",{},[35,36,37],"strong",{},"Tillväxtradarn (Growth Radar)"," — The core feature: lists all revitalized, constantly growing, and stable companies by municipality, industry, and size",[32,40,41,44],{},[35,42,43],{},"Classification algorithm"," — Ten-step pipeline that identifies stable periods, revitalization periods, and constant growth in company histories",[32,46,47,50],{},[35,48,49],{},"Growth rating & profitability"," — Composite 1–5 growth rating and 0–9 profitability level",[32,52,53,56],{},[35,54,55],{},"Company details"," — Interactive timeline charts showing revenue and employees per year, with color-coded periods (green for revitalization, yellow for stable phases)",[32,58,59,62],{},[35,60,61],{},"Filters & export"," — Filtering by municipality, industry (SNI code), company size, and revitalization period, with Excel export",[32,64,65,68],{},[35,66,67],{},"Company tracking"," — Notifications when companies change CEO or enter new classification states",[32,70,71,74],{},[35,72,73],{},"Comparison view"," — Compare multiple companies side by side",[32,76,77,80],{},[35,78,79],{},"Multi-tenant"," — Role-based access with organizations: Admin, OrganizationAdmin, OrganizationUser",[32,82,83,86],{},[35,84,85],{},"External data import"," — Batch importer for Retriever, Bisnode, SNI, group\u002Fownership data, and more",[10,88,90],{"id":89},"the-platform","The Platform",[15,92,93],{},[94,95],"img",{"alt":96,"src":97},"Revitalized companies — list view with filtering by municipality, industry, and size, showing growth and profitability ratings","\u002Fimages\u002Fportfolio\u002Fvensire-list.png",[15,99,100],{},[94,101],{"alt":102,"src":103},"Company detail — A Society AB with timeline chart showing revitalization period (green) and stable phase (yellow) across 2004–2021","\u002Fimages\u002Fportfolio\u002Fvensire-detail.png",[10,105,107],{"id":106},"tech-stack","Tech stack",[15,109,110,113,114],{},[35,111,112],{},"Frontend:"," Vue 3.4, TypeScript, Vite 5, Pinia, Tailwind CSS 3.4, HeadlessUI, ApexCharts, vee-validate, ",[115,116,117],"code",{},"@microsoft\u002Fsignalr",[15,119,120,123],{},[35,121,122],{},"Backend:"," ASP.NET Core 8, C#, Entity Framework Core 8, PostgreSQL, ASP.NET Identity (cookie auth), AutoMapper, SignalR, Swashbuckle\u002FOpenAPI",[15,125,126,129,130,133],{},[35,127,128],{},"Algorithm library:"," Pure .NET 8 class library (only external dependency is ",[115,131,132],{},"OneOf",")",[15,135,136,139],{},[35,137,138],{},"Secondary UI:"," Blazor WebAssembly for algorithm result comparison and manual QA",[15,141,142,145],{},[35,143,144],{},"CI\u002FCD:"," GitHub Actions → SCP → systemd on bare-metal",{"title":147,"searchDepth":148,"depth":148,"links":149},"",2,[150,151,152,153],{"id":12,"depth":148,"text":13},{"id":26,"depth":148,"text":27},{"id":89,"depth":148,"text":90},{"id":106,"depth":148,"text":107},"Vensire AB","2022-01-01","Multi-tenant SaaS for regional business development — classifies Swedish companies by growth and stability using a proprietary algorithm.","md",true,{},3,"\u002Fportfolio\u002Fen\u002Fvensire",{"title":5,"description":156},"portfolio\u002Fen\u002Fvensire",[165,166,167,168,169,170,171],".net","vue","typescript","postgresql","signalr","saas","analytics","\u002Fimages\u002Fportfolio\u002Fvensire-hero.png","IxkMHqSOCFskMhYU_MUvF3nrYKl4aH3szpOy8foEos4",1776248145112]