Portfolio
A sample of mini projects is shown here as a demonstration of front end application development capability. Much of the software engineering work undertaken by App Software Ltd involves back end architecture and development work in enterprise environments, so this page aims to showcase independent UI design work.
For more information regarding skills and services available, view my CV here or contact me.
Public Repositories / Opensource
For public repositories and open source projects, find our appsoftwareltd GitHub profile here.
NumeroMoney: Full-stack development of a personal finance platform
NumeroMoney is a personal finance web application that helps users understand their spending patterns through bank statement analysis, transaction categorization, and visual insights. Built as a production SaaS application with a subscription model, it demonstrates advanced full-stack development capabilities across backend, frontend, security, and DevOps domains.
Live Application: https://www.numeromoney.com
Technology Stack: .NET 10, ASP.NET Core, PostgreSQL, Svelte 5, Alpine.js, Bulma CSS
Deployment: Digital Ocean App Platform (Docker containerized)



Technical Achievements
1. Multi-Format Bank Statement Parser
Built a robust parsing engine supporting multiple financial data formats with generative AI assisted field mapping:
Supported Formats:
- CSV - Variable format with AI-assisted column mapping for different bank layouts
- OFX (Open Financial Exchange), QFX (Quicken), QIF (Quicken Interchange Format)
Technical Highlights:
- Adaptive parser handles non-standardized CSV formats from different banks (Barclays, First Direct, Barclaycard)
- Dual OFX parser for legacy SGML and modern XML formats
- Automatic field detection and mapping
- Transaction deduplication to prevent duplicate imports
- Comprehensive error handling with user-friendly feedback
2. Advanced Authentication & Security
Implemented multiple authentication methods with state-of-the-art security:
- Passwordless Authentication (WebAuthn/FIDO2)
- Two-Factor Authentication (TOTP) including RFC 6238 compliant time-based one-time passwords and QR code generation for authenticator apps (Google Authenticator, Authy, etc.)
- Social Authentication for Google OAuth 2.0 and Microsoft Identity Platform integration
Security Architecture:
- No session state dependency (fully load-balancer compatible)
- Temporary challenges stored in database with automatic expiration
- HTTPS-only with proper Content Security Policy
- Anti-forgery token protection on all forms
- Secure cookie handling with HttpOnly and SameSite policies
3. Subscription & Billing Integration
Comprehensive Stripe integration for Pro subscription management:
Features:
- Multi-currency support (GBP/USD with auto-detection from user timezone)
- 30-day free trial system with grace periods
- Customer Portal integration for subscription management
- Webhook event handling with signature verification
Pro Feature Gating:
- Advanced transaction search
- Split transaction handling
- Budget tracking and reporting
- Category-level insights
- Feature availability checks throughout application
4. International Currency & Timezone Support
Built comprehensive internationalization features:
User-Level Defaults:
- Required timezone and currency configuration before first account creation with optional timezone/currency override per bank account
Currency Precision:
- DECIMAL(18,8) precision for diverse currency types
- Variable decimal place handling:
- 0 decimals: JPY (Japanese Yen)
- 2 decimals: GBP, USD, EUR (standard currencies)
- 3 decimals: KWD (Kuwaiti Dinar)
- 8 decimals: BTC, ETH (cryptocurrencies)
5. Category Management System
Sophisticated hierarchical category system for transaction organization:
Hierarchy Features:
- Two-level parent-child relationships
- Type inheritance (children inherit Income/Transfer status from parents)
- Bidirectional type propagation with budget-aware updates
- Database constraints enforce business rules
6. Transaction Management
Advanced transaction handling with split capability:
Split Transactions (Pro Feature):
- Divide single transactions across multiple categories
- Maintain amount accuracy with precision decimal math
- Visual split editor with add/remove rows
- Validation ensures splits sum to transaction total
Search & Filtering:
- Advanced search with multiple criteria
- Date range filtering
- Category-based queries
- Amount range searches
- Description text search
Bulk Operations:
- Multi-transaction categorization
- Batch editing capabilities
- Transaction duplication detection
7. Modern Frontend Architecture
Hybrid approach combining multiple modern frameworks:
Svelte 5 Custom Elements:
- Web Component pattern for reusable UI elements
- Reactive state management
- Scoped styles and encapsulation
- TypeScript support with strict type checking
Alpine.js:
- Lightweight reactivity for page-level interactions
- Declarative templating
- Event handling and state management
- No build step required for rapid development
Vanilla JavaScript:
- Direct DOM manipulation where performance critical
- Event delegation patterns
- Modern ES6+ features (async/await, modules)
CSS Framework:
- Bulma CSS for responsive layouts
- Custom CSS variables for theming
- Mobile-first responsive design
- Accessible components (ARIA labels, keyboard navigation)
8. Database Design Excellence
PostgreSQL schema with best practices:
Schema Features:
- Foreign key relationships with cascade behavior
- Check constraints enforce business rules at database level
- Indexes on frequently queried columns
- TIMESTAMPTZ for proper timezone handling
- UUID primary keys for distributed systems
Migration System:
- DbUp for version-controlled schema changes
- Automatic migration runner on application startup
- Rollback support for failed migrations
- Upgrade logging for troubleshooting
9. Enterprise-Grade Development Practices
Testing:
- Unit tests with xUnit and Moq
- Playwright E2E tests for critical user flows
- Test data fixtures for consistent testing
DevOps:
- Docker containerization with multi-stage builds
- Docker Compose for local development dependencies (PostgreSQL, Redis)
- Environment-specific configuration (Development, Production)
- Secret management via environment variables
- Automated database migrations on deployment
Code Quality:
- Repository pattern for data access abstraction
- Service layer for business logic encapsulation
- Interface-driven design for testability and DI
- Async/await throughout for non-blocking operations
- Comprehensive error handling and logging
- Dapper ORM for performance-critical queries
Developer Experience:
- VS Code workspace with task automation
- PowerShell scripts for common operations (Stripe CLI, cleanup)
- AI-friendly documentation structure (
.ai-instructions/with skills system) - DBCODE extension integration for database querying
- Comprehensive inline documentation
10. Performance & Optimization
Database Performance:
- Strategic indexing on foreign keys and query columns
- Query optimization with Dapper for control
- Connection pooling
- Prepared statements to prevent SQL injection
Frontend Performance:
- Font preloading with WOFF2 format
- CSS/JS bundling and minification
- Asset versioning for cache busting
- Lazy loading for non-critical resources
- Mapbox API integration with external CDN
Caching Strategy:
- Distributed caching via AWS CloudFront
- Static asset caching with ETags
- Response compression
Project Highlights
Real-World Problem Solving
NumeroMoney addresses genuine pain points in personal finance:
- Banks provide statements in inconsistent formats
- Manual categorization is tedious and error-prone
- Understanding spending patterns requires visual analysis
- Budget tracking needs to be flexible and intuitive
Production-Ready Architecture
The application demonstrates production-grade patterns:
- Horizontal scalability (no session state, stateless design)
- Multi-tenant data isolation via user UUIDs
- Graceful error handling with user-friendly messages
- Comprehensive audit trails
- GDPR considerations (data deletion cascades)
Modern Development Stack
Showcases expertise across the full technology spectrum:
- Backend: .NET 10, ASP.NET Core MVC/Blazor
- Data: PostgreSQL 16, Dapper ORM, DbUp
- Frontend: Svelte 5, Alpine.js, TypeScript, Bulma CSS
- Auth: WebAuthn/FIDO2, TOTP, OAuth 2.0
- Payments: Stripe API v2024.x
- DevOps: Docker, Digital Ocean, Git
- Testing: xUnit, Moq, Playwright
Image Processor and Optimizer
Image Processor is a tool for converting between PNG, JPEG, WebP, BMP, TIFF, GIF and SVG formats, also facilitating resize and optimisation. The tool processes images directly in the browser and can process sets of images in bulk.
www.appsoftware.com/tools/utilities/image-processor

Artists Value and Histogram Tool
The Value and Histogram tool for artists enables a user to upload an image for processing down to a limited number of values, adjust stops on a histogram and simplify edges. This helps an artist to evaluate tone when composing drawings and paintings, reducing the complexity of an image.
www.appsoftware.com/tools/art/values-and-grid

Favicon Generator
Favicon Generator is a tool for creating a set of icons aimed at web application developers, and is able to convert from a range of input formats to produce a set of appropriately sized images for inclusion as icons targeting a range of device types.
www.appsoftware.com/tools/utilities/favicon-generator

Text Formatter
A text formatting tool using Code Mirror 6 for input and output, providing a range of common text formatting and processing operations useful for software development and data engineering.
www.appsoftware.com/tools/utilities/text-formatter

Scrap Pad
www.appsoftware.com/tools/utilities/scrap-pad
Scrap pad is a simple tool that uses Code Mirror 6 to allow users to save a single note, saved to the database under their user account to facilitate the quick recording of data on any device with a web browser.

Outdoors and Eco
Outdoors and Eco is a portal dedicated to sharing and promoting outoors activities. Via geospatial API integrations this web application facilitates the search and curation of outdoor and eco-friendly activities and products.
Built with ASP.NET, Alpine.js, Bulma CSS, Mapbox, Postgres, AWS
Activity Search
Users can search by location or activity category / category.

Route Mapping via Mapbox API Integration

User Curated Activities
Curated activities can optionally have location information associated with them, with users being able to select a place or create routes on a map. The map types of 'Street' / 'Satellite' or 'Outdoors' can be selected depending on the most appropriate option for the activity.
