Free, offline-capable, multi-language financial statement analysis for Ukrainian businesses – powered 100% in the browser (no servers, no API keys).

Live Demo: https://whitewaw.github.io/Assessment-of-Ukrainian-financial-statements/

GitHub Repo: https://github.com/whitewAw/Assessment-of-Ukrainian-financial-statements

Small and medium businesses in Ukraine (and anywhere) often need quick insights from their balance sheet and income statement without sending data to third-party services or paying SaaS fees. I wanted:

  • Zero back-end infrastructure
  • Professional-grade ratio analysis and multi-year comparison
  • Installable PWA with offline mode
  • Strict privacy: data never leaves the browser
  • AI assistance without OpenAI keys or billing surprises

Blazor WebAssembly + Chrome’s built-in Gemini Nano made this possible.

Core Highlights

Feature -> Benefit

  • Blazor WebAssembly (.NET 10) -> Full C# front-end, no server required
  • AOT Compilation -> Faster startup + optimized runtime
  • On-Device AI (Gemini Nano) -> Private financial chat & contextual insights
  • 16 Analysis Tables -> Comprehensive coverage of capital, liquidity, solvency, efficiency
  • 7 Interactive Charts -> Visual composition & trend exploration
  • Multi-Language (6) -> Ukrainian, English, German, Spanish, French, Russian
  • PWA + Offline -> Works after first load; installable
  • Local Storage + JSON Import/Export -> Data portability without backend
  • Privacy-First -> No telemetry, no tracking, no API keys

AI Assistant: 100% Client-Side

Chrome 127+ exposes a Prompt API enabling local inference via Gemini Nano. No keys, no cloud calls.

Example capability prompt:

const capabilities = await LanguageModel.availability(); "available" 

Sample financial question internally passed to the AI service:

var prompt = $$""" Using the company's working capital ( {model.WorkingCapitalCurrent} ), current ratio ( {model.CurrentRatio} ), and debt-to-equity ( {model.DebtToEquity} ), provide: 1. A concise stability assessment 2. Top 3 risks (if any) 3. Recommended next action Answer in Ukrainian if source data locale is 'uk'. """$$; 

The assistant streams responses for better UX and can explain formulas contextually.

Architecture Overview

AFS/ (Blazor WASM App) App.razor → Root + Router Pages/ → UI pages (AI Assistant, Tables, Charts) wwwroot/index.html → SEO meta + PWA shell AFS.ComponentLibrary/ Components/ → Reusable UI (Tables, Charts, Chat) AFS.Core/ Models/ → Financial & ratio models Services/ → Calculation + AI integration + Storage Interfaces/ → Abstractions (IAIFinancialAdvisor, etc.) 

Key separation: AFS.Core handles pure calculations (testable logic), while UI stays thin.

Financial Analysis Coverage

Includes:

  • Liquidity: Current, Quick, Cash, Working Capital
  • Solvency: Debt-to-Equity, Interest Coverage, Leverage
  • Profitability: ROA, ROE, Margins
  • Efficiency: Turnover metrics (assets, receivables, inventory, payables)
  • Stability: Autonomy coefficient, classification levels
  • Fixed & Intangible asset efficiency

Each table is generated from strongly typed models instead of ad-hoc dictionaries, enabling safer refactors.

Performance Choices

  • AOT publish shrinks cold start and improves runtime math-heavy loops
  • IL trimming + Brotli compression reduces payload
  • Critical CSS inlined in index.html for faster LCP
  • Service Worker caches static assets → instant repeat visits

Publishing command:

# Release build with AOT dotnet publish AFS/AFS.csproj -c Release -o build 

Privacy & Data Handling

No calls are made to external APIs for analysis. Data stays:

  • In memory (runtime calculations)
  • In browser Local Storage (optional save)
  • Optional JSON export:
{ "Year": 2024, "Form1": { "AssetsTotal": 1234567 }, "Form2": { "NetProfit": 45678 } } 

You control export/import – nothing is uploaded.

Getting Started (Local)

# Clone git clone https://github.com/whitewAw/Assessment-of-Ukrainian-financial-statements.git cd Assessment-of-Ukrainian-financial-statements # Restore dotnet restore # Ensure WASM tooling dotnet workload install wasm-tools # Run dotnet run --project AFS # Visit https://localhost:7157 

Enable AI (Chrome):

  1. Update to Chrome 127+
  2. chrome://flags/#prompt-api-for-gemini-nano → Enabled
  3. First run downloads Gemini Nano (~1.7GB one-time)

Example: Ratio Calculation Service (Simplified)

public class LiquidityRatioService { public decimal CurrentRatio(decimal currentAssets, decimal currentLiabilities) => currentLiabilities == 0 ? 0 : currentAssets / currentLiabilities; public decimal QuickRatio(decimal liquidAssets, decimal currentLiabilities) => currentLiabilities == 0 ? 0 : liquidAssets / currentLiabilities; } 

Integrated into a composite financial model so derived ratios are accessible to the AI advisor.

Internationalization (i18n)

Resx-based resources under AFS.ComponentLibrary/Resources/:

  • Resource.uk.resx
  • Resource.en.resx
  • etc.

Culture selector updates displayed language instantly – no reload.

SEO & GitHub Pages Quirk

Because this is a Blazor SPA hosted on GitHub Pages, Google Search Console may show a “False 404” during inspection of dynamic routes. A 404.html fallback mirrors index.html so all routes hydrate properly. Canonical + hreflang tags are manually set in index.html.

Roadmap (Selected)

  • PDF report generation (AI summary + graphs)
  • Multi-company comparison panel
  • Forecasting & anomaly detection (local AI augment)
  • Optional cloud sync layer (opt-in)

Contributions welcome – especially localization or advanced financial models.

Lessons Learned

  • On-device AI drastically lowers friction (no keys, instant trust)
  • Blazor AOT is now fast enough for real-time ratio computation
  • Strong typing across financial models prevents subtle column mapping errors
  • PWA + offline + privacy is a compelling trio for sensitive domains (finance, health, legal)

How You Can Help

  • ⭐ Star the repo if you find it useful
  • 🐛 Open issues for incorrect ratio definitions or edge cases
  • 🌍 Add new language translations
  • 📊 Contribute advanced metrics or sector benchmarks
  • 🤖 Improve AI prompts for financial diagnostics

Final Thoughts

This project shows what’s now possible entirely in the browser: serious domain analysis + AI guidance without surrendering data or paying API bills. If you’re building privacy-first analytical tools, combining Blazor WebAssembly with on-device AI is absolutely worth exploring.

Explore the demo, inspect the code, and feel free to fork.

👉 Demo: https://whitewaw.github.io/Assessment-of-Ukrainian-financial-statements/

👉 Code: https://github.com/whitewAw/Assessment-of-Ukrainian-financial-statements

Questions?

Drop them in the comments or open a GitHub Discussion.

Made with ❤️ + .NET + WebAssembly + On-Device AI.


Source: DEV Community.


Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.