Open Source ERP Platform Research: Solanasis SaaS Strategy
Date: March 10, 2026 Purpose: Evaluate open source ERP platforms for forking into a custom SaaS offering Status: Initial Research — Pending Dmitri’s Input on Clarifying Questions
Table of Contents
- Executive Summary & Recommendation
- Platform Comparison Matrix
- Deep Dive: ERPNext (Frappe Framework)
- Deep Dive: Tryton
- Deep Dive: Odoo Community Edition
- Other Contenders Evaluated
- Licensing Analysis & SaaS Strategy
- Forking Strategy & Upgrade Path
- CRM & Sales Pipeline Assessment
- Hosting & Deployment Architecture
- E2E Testing Strategy
- Community Sentiment (Reddit, HN, Forums)
- AI Integration Strategy
- Risk Assessment
- Complete UI Reskinning & White-Labeling Strategy (CRITICAL)
- Clarifying Questions for Dmitri
- Verification Report: Fact-Check Results
- Dmitri’s Answers & Strategy Updates
- Self-Hosting Guide: Windows WSL2 + Docker + Cloudflare Tunnel
- Next Steps: Detailed Planning Documents Needed
Executive Summary & Recommendation
After extensive research across 7 open source ERP platforms — analyzing GitHub repos, licensing, community sentiment on Reddit/HN/forums, extensibility, CRM capabilities, and SaaS viability — here is the recommendation stack:
The Verdict: ERPNext (Frappe Framework) — With a Twist
Primary Recommendation: Fork ERPNext + Use Frappe CRM as the Sales Pipeline
-
Why ERPNext/Frappe wins for Solanasis:
- GPL v3 license = SaaS loophole applies (no obligation to open-source modifications for SaaS-only deployment)
- Frappe Framework is a genuine full-stack low-code platform (Python + Vue.js 3) — not just an ERP, but a platform for building ANY custom business application
- 171+ apps in the ecosystem prove the framework’s extensibility beyond ERP
- Frappe CRM (separate from ERPNext’s CRM module) is a modern, sales-focused CRM with email sync, WhatsApp, and Twilio integrations built-in
- Custom app architecture keeps your code separate from core = clean upgrade path
- Docker-ready, multi-tenant, production-proven at scale
- Active community: 32k+ GitHub stars (ERPNext), 9.7k+ (Frappe Framework), 22k+ forum users, 600+ contributors on v16
- v16 released January 2026 with 2x performance improvements
- Cypress E2E testing framework already in place
-
Why NOT Tryton: Smaller community (~168 GitHub stars on mirror), weaker CRM, no native multi-tenancy for SaaS, Mercurial-based workflow (not Git-native), less white-labeling support, limited cold email capabilities
-
Why NOT Odoo CE: While Odoo CE has a massive community (48k+ stars) and LGPL license, the Community vs Enterprise gap is significant — missing Studio (low-code builder), automated workflows, advanced CRM features. You’d be building on an intentionally limited version.
-
Why NOT Apache OFBiz: Apache 2.0 license is most permissive, but tiny community, steep Java learning curve, and limited modern CRM capabilities make it impractical for a small team.
The Strategic Play
- Fork ERPNext as the ERP backbone for client deployments
- Use Frappe CRM (or build a custom CRM on Frappe Framework) for Solanasis’s own sales pipeline
- Build all custom modules as Frappe custom apps (never modify core)
- Layer in white-labeling and multi-tenancy for the SaaS offering
- Maintain E2E test suite to protect against regressions on upstream merges
Platform Comparison Matrix
| Criteria | ERPNext (Frappe) | Tryton | Odoo CE | Axelor | Apache OFBiz | Dolibarr | iDempiere |
|---|---|---|---|---|---|---|---|
| License | GPL v3 | GPL v3 | LGPL v3 | AGPL v3 | Apache 2.0 | GPL v3+ | GPL v2+ |
| SaaS Loophole | ✅ Yes | ✅ Yes | ✅ Yes (LGPL) | ❌ No (AGPL) | ✅ Yes (Apache) | ✅ Yes | ✅ Yes |
| GitHub Stars | ~32k | ~168 (archived mirror) | 48.5k | 927 | ~1k | 6.7k | ~431 |
| Tech Stack | Python/JS/Vue | Python/GTK/JS | Python/JS | Java/Spring | Java | PHP | Java |
| Framework Extensibility | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| CRM Quality | ⭐⭐⭐⭐ (w/ Frappe CRM) | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| Cold Email/Outreach | ⭐⭐⭐ (needs work) | ⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ |
| Multi-Tenancy | ✅ Built-in | ❌ Custom work | ✅ Built-in | ✅ Yes | ✅ Built-in | ✅ Yes | ✅ Yes |
| Docker Ready | ✅ Official | ✅ Official | ✅ Official | ✅ Yes | ✅ Yes | ✅ Official | ✅ Yes |
| White-Labeling | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Documentation | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐ | ⭐⭐ |
| Community Size | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐ |
| E2E Testing | ✅ Cypress | ⚠️ Limited | ⚠️ Varies | ⚠️ Varies | ⚠️ Varies | ⚠️ Varies | ⚠️ Varies |
| Upgrade Safety | ⭐⭐⭐⭐ (custom apps) | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
Deep Dive: ERPNext (Frappe Framework)
Architecture Overview
ERPNext is built on the Frappe Framework — a full-stack, metadata-driven web framework that serves as a low-code application platform:
- Backend: Python (server-side logic, API, business rules)
- Frontend: JavaScript + Vue.js 3 (Frappe UI component library with Tailwind CSS)
- Database: MariaDB 10.6.6+ (required for ERPNext production — PostgreSQL is supported at the Frappe Framework level only, NOT for ERPNext production deployments)
- Caching & Queuing: Redis
- Real-time: WebSockets via Socket.IO
- Templating: Jinja2
The DocType System (Core Extensibility)
This is where Frappe really shines as a development platform. A DocType defines both the Model (data structure) and View (UI) of your data:
- Every object in ERPNext/Frappe is a DocType with predefined fields, permissions, and relationships
- Custom DocTypes can be created with minimal or no coding
- DocTypes are saved as JSON files = version controllable
- Every DocType automatically gets REST API endpoints
- Custom controllers (Python) and client scripts (JavaScript) can be attached
- DocType inheritance allows extending existing types
Frappe Ecosystem (171+ Apps)
Key apps beyond ERPNext:
- Frappe CRM — Modern standalone CRM (launched 2023, separate from ERPNext’s CRM)
- Frappe HR — Full HRMS
- Frappe Desk — Ticketing/support system
- Frappe Insights — Data analytics tool
- Frappe LMS — Learning Management System
- 35+ developer tools available in the ecosystem
Frappe CRM vs ERPNext CRM (Critical Distinction)
| Aspect | Frappe CRM | ERPNext CRM Module |
|---|---|---|
| Focus | Standalone, sales-focused | Part of full ERP system |
| Data Model | Leads & Deals (simple pipeline) | Leads → Opportunities → Quotations → Orders |
| Integrations | WhatsApp, Twilio, Exotel, Email sync built-in | Must be custom-built |
| Use Case | Sales teams needing pipeline management | Companies needing ERP + CRM together |
| Cold Email | Better email sync + multi-channel | Basic email campaigns, buggy at scale |
| UI | Clean, modern, purpose-built | General ERP interface |
Pro Tip: Frappe CRM is the better starting point for Solanasis’s own sales pipeline needs. ERPNext’s CRM module has known bugs with email campaigns — notably, if ANY one Email Group member unsubscribes, the entire Email Campaign gets unsubscribed for all recipients (GitHub Issue #52448, Feb 2026). However, note that Frappe CRM is licensed under AGPL v3 (not GPL v3), which has implications for your SaaS strategy — see Licensing section for details. You can run both Frappe CRM + ERPNext on the same Frappe instance.
GitHub & Version Status
- ERPNext: ~32,152 stars, ~10,611 forks, 600+ contributors on v16 release
- Frappe Framework: ~9,780 stars, ~4,718 forks, active development
- Latest: v16 (January 2026) — 2x performance improvements, redesigned workspace, modern UI
- EOL for v16: End of 2029
Customization & White-Labeling
- White-label module available (ERPNext Whitelabel) — single settings page for branding
- Custom logos, favicons, splash images, themes
- Custom apps architecture keeps modifications completely separate from core
- Hooks system (hooks.py) lets you intercept and extend any core behavior without modifying source
Resource Requirements
- Database Server: Minimum 8GB RAM (rule of thumb: RAM = total DB size), 2+ vCPU
- Application Server: ~400MB memory minimum per bench, gunicorn workers = 2 × num_cores + 1
- Recommended: Vertical scaling up to ~64 vCPU / 128GB RAM before horizontal scaling
Deep Dive: Tryton
Why Tryton Falls Short for Solanasis
While Tryton is a solid, stable ERP with 15+ years of development history, several factors make it a weaker choice:
- Tiny Community: ~168 GitHub stars (mirror) vs ERPNext’s 10.6k — this matters enormously for community support, third-party modules, and finding developers
- No Native Multi-Tenancy: Built-in multi-company support but NOT true SaaS multi-tenant architecture — requires significant custom work
- Mercurial-Based Workflow: Primary development on Heptapod using Mercurial, not Git — adds friction for a team that wants to fork and manage via Git/GitHub
- Basic CRM: Sale opportunity module exists with limited pipeline visualization. Kanban views ARE available (correction from earlier draft), but the CRM still lacks cold email capabilities and has notification-focused email only
- Limited White-Labeling: Requires custom CSS/theme work — no out-of-the-box white-label solution
- GTK Desktop Client: The desktop client uses GTK+ (old school) — web client (Sao) uses jQuery/Bootstrap, which feels dated vs Frappe’s Vue.js 3
- Performance at Scale: Documented issues with large databases — problematic tables (stock_move, account_move) reaching tens of GBs cause query slowdowns
- Documentation Gaps: Community acknowledges missing user workflows and scattered documentation
Where Tryton Beats ERPNext
To be fair:
- More stable/predictable release cycle
- Stronger accounting foundation
- Better multi-company support within a single instance
- Less “bloat” — smaller, more focused codebase
- Python-only stack (no JavaScript framework to learn for backend)
Verdict on Tryton
Tryton would be suitable for a company that needs rock-solid accounting in a traditional ERP with no SaaS multi-tenancy needs. For Solanasis’s goals of building a customizable SaaS with strong CRM/pipeline management and cold outreach — Tryton falls short on too many fronts.
Deep Dive: Odoo Community Edition
Why Odoo CE Is the Runner-Up
Odoo has the largest open source ERP community on the planet (48.3k GitHub stars, 31k forks) and the Odoo Community Association (OCA) maintains thousands of high-quality modules. However:
The Community vs Enterprise Problem
This is the critical issue for Solanasis. Odoo SA intentionally limits Community Edition to drive Enterprise sales:
Missing from Community Edition:
- Odoo Studio (low-code/no-code builder) — this is huge for rapid customization
- Automated workflows/actions — must be built manually
- Advanced inventory (barcode scanning, shipping integrations)
- Official mobile apps
- Vendor support, hosting assistance, version upgrade help
- Advanced CRM features (AI lead scoring in Enterprise only)
What You Get in Community:
- Core modules: CRM, Sales, Accounting, Inventory, Manufacturing, HR
- LGPL v3 license — most SaaS-friendly of the copyleft licenses
- Massive OCA module ecosystem
- Excellent documentation
- Largest pool of developers familiar with the platform
LGPL v3 License Advantage
LGPL is more permissive than GPL for SaaS:
- You can create proprietary modules that link to the LGPL-covered library
- Your custom modules DON’T need to be open-sourced
- Modifications to the LGPL-covered core itself must stay LGPL
- Cleaner legal boundary than relying on the GPL “SaaS loophole”
Why ERPNext Still Wins Over Odoo CE for Solanasis
- No intentional feature gating — ERPNext doesn’t hold back features for an enterprise tier
- Frappe Framework is a better dev platform — DocTypes, custom apps, hooks system are more developer-friendly for rapid custom development
- Frappe CRM — purpose-built modern CRM vs Odoo’s CE CRM which lacks Enterprise features
- Smaller learning surface — Odoo’s codebase is massive; Frappe is more focused
- Community ethos — ERPNext community is focused on the open source product; Odoo community always plays second fiddle to Enterprise
Other Contenders Evaluated
Axelor Open Suite — ELIMINATED
- License: AGPL v3 — DEAL BREAKER
- AGPL requires source code disclosure when modified software is accessed over a network (SaaS)
- You would be forced to open-source all your customizations
- Eliminates competitive advantage for a SaaS business model
Apache OFBiz — Not Practical
- License: Apache 2.0 — most permissive, ideal for SaaS legally
- But: Steep Java learning curve, small community, complex codebase, outdated UI
- Would require strong Java development team and significant investment
- Not practical for a small team trying to move fast
Dolibarr — Too Basic
- License: GPL v3+
- PHP-based, lightweight, good for very small businesses
- CRM is basic (no Kanban, no lead scoring, no email tracking)
- Performance degrades with data volume growth
- Documentation is weak and partially French-only
- Better suited as a simple invoicing/accounting tool, not a SaaS platform
iDempiere — Too Niche
- License: GPL v2+
- Java-based, 410 GitHub stars, steep learning curve
- OSGI plugin system is powerful but complex
- Documentation gaps acknowledged at their own 2025 conference
- Multi-tenant capable but requires significant expertise
Licensing Analysis & SaaS Strategy
The GPL v3 “SaaS Loophole” — How It Works
This is the legal foundation of Solanasis’s SaaS strategy with ERPNext:
- GPL v3 obligations trigger on “distribution” — i.e., giving someone a copy of the software
- SaaS is NOT distribution — GPL v3 Section 0 (Definitions) explicitly states: “mere interaction with a user through a computer network, with no transfer of a copy, is not conveying”
- Therefore: Running a forked, customized ERPNext as SaaS does NOT require open-sourcing your modifications
- This is NOT the case with AGPL v3 — AGPL Section 13 closes this loophole by requiring source disclosure for network-accessible modified software
ERPNext Specific Licensing Status (March 2026)
- ERPNext Code: GPL-3.0-only
- Frappe Framework: GPL-3.0
- ERPNext Documentation: CC-BY-SA-3.0
- Newer Frappe Apps (post-April 2024): Released under AGPL v3 (e.g., Frappe Builder)
- ERPNext itself: Remains GPL v3 — no change to AGPL
What You CAN Do
- ✅ Fork ERPNext and Frappe Framework
- ✅ Customize extensively
- ✅ Deploy as SaaS and charge customers
- ✅ Keep all your modifications private/proprietary
- ✅ Create custom Frappe apps without licensing fees
- ✅ White-label and rebrand completely
What You MUST Do
- ✅ Maintain GPL v3 license notice in the codebase
- ✅ Track changes with dates in source files
- ✅ If you ever DISTRIBUTE the code, it must be under GPL v3
- ✅ NOT use “ERPNext” in your domain name or product name (trademark restriction)
What You CANNOT Do
- ❌ Use the “ERPNext” name/trademark for your SaaS product
- ❌ Distribute your modified fork without including GPL v3 source
- ❌ Mix in AGPL v3 code (like newer Frappe apps such as Frappe Builder, and notably Frappe CRM is also AGPL v3) without accepting AGPL obligations — if you incorporate AGPL code, the AGPL network-disclosure requirements apply to the combined work, which would CLOSE the SaaS loophole for those components
- ❌ Sublicense — your fork stays GPL v3 forever (unless you are the sole copyright holder with no external contributions, which is effectively impossible once contractors contribute)
CRITICAL WARNING: Frappe CRM is AGPL v3. This means if you use Frappe CRM as-is in your SaaS, you’d need to provide source access to users interacting with it over the network. Options: (1) Build your own CRM module on the GPL v3 Frappe Framework instead, (2) Accept AGPL obligations for the CRM component, or (3) Use Frappe CRM internally only (not as part of the client SaaS offering). Get legal counsel on this specific point.
Legal Precedent Warning
Orange v. Entr’Ouvert (2024, Paris): Orange was ordered to pay €860,000 (€500k damages + €150k profits + €150k moral damages + €60k legal costs) for GPL v2 violation — using GPL-licensed Lasso software (57% of their Identity Management Platform) without providing source code when distributing. Case took 12 years to resolve (2010-2024). Key takeaway: GPL violations are enforceable in court with serious financial consequences. As long as you don’t distribute, SaaS deployment is safe. But document your compliance strategy.
Pro Tips for Licensing Safety
- Get a brief legal review before launch — a few hours of IP attorney time is cheap insurance
- Never distribute your fork — SaaS-only deployment keeps you safe
- Document everything — keep a CHANGES file, track what’s modified vs upstream
- Consider CLAs (Contributor License Agreements) or DCOs (Developer Certificate of Origin) from any contractors contributing to your fork — CLAs are NOT legally required for GPL v3 but provide copyright clarity; DCOs are a lighter-weight alternative that reduces friction
- Watch for AGPL creep — Frappe is shifting newer apps to AGPL; be careful what you pull in. GPL v3 and AGPL v3 are compatible, but the AGPL’s network-disclosure requirements apply to the combined work
- JavaScript distribution risk — Serving GPL-licensed JavaScript to users’ browsers IS considered distribution, which triggers GPL source code obligations. Keep your proprietary frontend code separate from GPL frontend code. If you customize ERPNext’s JS and serve it via browser, you must provide source access
- Name your SaaS something completely different — no “ERPNext” or “Frappe” in the product name
Forking Strategy & Upgrade Path
Recommended Repository Architecture
solanasis-platform/
├── frappe/ # Upstream Frappe Framework (submodule or fork)
├── erpnext/ # Upstream ERPNext (submodule or fork)
├── frappe-crm/ # Upstream Frappe CRM (submodule or fork)
├── solanasis_core/ # YOUR custom Frappe app — core customizations
├── solanasis_crm_extensions/ # YOUR custom CRM extensions
├── solanasis_saas/ # YOUR multi-tenancy & SaaS management layer
├── solanasis_whitelabel/ # YOUR branding/theming
├── solanasis_integrations/ # YOUR third-party integrations
├── solanasis_e2e_tests/ # YOUR E2E test suite
└── docker/ # YOUR deployment configs
The Golden Rule: NEVER Modify Core
All Solanasis customizations should live in separate Frappe custom apps. This is critical because:
- Clean upgrades: When ERPNext releases v17, v18, etc., you pull the new version without merge conflicts
- Clear IP boundary: Your proprietary code is physically separated from GPL code
- Easier testing: You test your apps independently from core
- Developer clarity: New team members know exactly where Solanasis code lives
Git Strategy for Upstream Sync
# Initial setup
git remote add upstream-erpnext https://github.com/frappe/erpnext.git
git remote add upstream-frappe https://github.com/frappe/frappe.git
# Before each major version upgrade
git fetch upstream-erpnext
git checkout -b upgrade/v17 main
git merge upstream-erpnext/version-17 # or rebase if you prefer linear history
# Test thoroughly in staging
# Run full E2E test suite
# Fix any breaking changes in your custom apps
# Merge to main only after all tests passUpgrade Workflow
- Staging Environment: Always upgrade in staging first, never production
- Run E2E Tests: Full test suite against upgraded staging
- Check Custom Apps: Verify all hooks, DocType extensions, and API customizations
- Database Migration: Frappe includes migration scripts — run
bench migrate - Regression Testing: Manual QA on critical workflows
- Blue-Green Deploy: Switch production traffic only after verification
Pro Tip: Upgrade Insurance
Keep a “compatibility test matrix” that maps your custom DocTypes, hooks, and API endpoints to the upstream code they depend on. When upstream releases a new version, diff their changelogs against your matrix to quickly identify breaking changes.
CRM & Sales Pipeline Assessment
Solanasis’s Cold Outreach Needs
Based on the requirement to manage a massive sales pipeline with cold emails and outreach, here’s the honest assessment:
What ERPNext/Frappe CAN Handle
- Lead capture from websites, social media, events
- Opportunity tracking through pipeline stages
- Kanban board visualization (Frappe CRM)
- Email sync and communication logging
- WhatsApp and Twilio integration (Frappe CRM)
- Activity management, follow-ups, scheduling
- Contact and customer profiles
- Basic email campaigns (small batches)
- Pipeline analytics and reporting
What ERPNext/Frappe CANNOT Handle Natively
- Mass cold email at scale (deliverability optimization, warming, rotation)
- A/B testing of email campaigns
- Advanced open/click tracking at scale
- Email sequence automation (multi-step drip campaigns)
- Deliverability monitoring and domain health
- Automatic bounce/complaint handling at scale
Recommended Approach: Hybrid Stack
For Solanasis’s cold outreach needs, the recommendation is a hybrid approach:
- Frappe CRM = Lead/deal management, pipeline, and relationship tracking
- Dedicated cold email tool (integrated via API/webhook) = Mass outreach execution
- Options: Instantly.ai, Smartlead, Lemlist, or self-hosted alternatives
- These tools handle deliverability, warming, rotation, sequences
- n8n or Zapier = Workflow automation between Frappe CRM and cold email tool
- Custom Frappe app = Build the integration layer as a Solanasis custom module
This gives you the best of both worlds — professional-grade cold email infrastructure + full CRM pipeline management in your own platform.
Long-Term Play
As Solanasis matures, you could build a native cold email module as a Frappe custom app, incorporating:
- SMTP rotation and domain warming
- Email sequence builder
- Deliverability dashboard
- Integration with DNS (SPF, DKIM, DMARC verification)
- Compliance tools (CAN-SPAM, GDPR unsubscribe management)
This becomes a competitive differentiator for your SaaS offering to clients.
Hosting & Deployment Architecture
Recommended Cloud Architecture (AWS or Azure)
┌─────────────────────────────────────────────────┐
│ Load Balancer │
│ (ALB on AWS / App Gateway on Azure) │
└──────────────────────┬──────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌──────────────┐┌──────────────┐┌──────────────┐
│ App Server ││ App Server ││ App Server │
│ (Frappe + ││ (Frappe + ││ (Frappe + │
│ Gunicorn) ││ Gunicorn) ││ Gunicorn) │
└──────┬───────┘└──────┬───────┘└──────┬────────┘
│ │ │
└───────────────┼───────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌──────────────┐┌──────────────┐┌──────────────┐
│ MariaDB ││ Redis ││ Redis │
│ (RDS/Azure ││ (Cache) ││ (Queue) │
│ Database) ││(ElastiCache/ ││ │
│ ││ Azure Cache)││ │
└──────────────┘└──────────────┘└──────────────┘
AWS Deployment Option
- Compute: ECS Fargate (serverless containers) or EC2 with Docker
- Database: Amazon RDS for MariaDB (managed, automated backups)
- Cache: Amazon ElastiCache for Redis
- Storage: S3 for file uploads and backups
- Load Balancer: Application Load Balancer (ALB)
- DNS: Route 53
- SSL: AWS Certificate Manager (free TLS certificates)
- Monitoring: CloudWatch + custom Frappe metrics
Azure Deployment Option
- Compute: Azure Container Instances or Azure App Service with Docker
- Database: Azure Database for MariaDB (managed)
- Cache: Azure Managed Redis (note: Azure Cache for Redis is being retired Sept 2028 — use Azure Managed Redis for new deployments)
- Storage: Azure Blob Storage
- Load Balancer: Azure Application Gateway
- DNS: Azure DNS
- SSL: Azure-managed certificates
- Monitoring: Azure Monitor + Application Insights
Multi-Tenancy Strategy
Frappe supports both DNS-based and port-based multi-tenancy with multiple sites per bench. DNS-based (bench config dns_multitenant on) is the standard production approach where sites are accessed by domain name:
- Option A: Database-per-tenant — each client gets their own database, same application server. Better isolation, slightly more resource overhead.
- Option B: Shared database with site separation — Frappe’s native approach. Multiple sites share infrastructure but have logical separation. More efficient, less isolation.
- Recommendation for SaaS: Start with Option A (database-per-tenant) for stronger data isolation — critical for selling to SMBs and nonprofits who care about data privacy.
Estimated Monthly Costs (Starting Point)
AWS (Solanasis internal + first few clients):
- t3.large EC2 (2 vCPU, 8GB RAM): ~0.0832/hr on-demand us-east-1)
- RDS MariaDB db.t3.medium: ~80.30/mo — original estimate was too low)
- ElastiCache t3.small: ~24.82/mo)
- S3 storage: ~$5/month
- ALB: ~16.43 + data processing)
- Total: ~$195-210/month to start (on-demand pricing; Reserved Instances could save 30-40%)
Scales to: ~$500-800/month for 10-20 client tenants on moderately sized instances
Pro Tip: Use Credits Wisely
Since you have AWS/Azure credits, start with slightly larger instances than minimum to avoid performance headaches during the customization/development phase. Downsize once you’ve optimized.
E2E Testing Strategy
Current State in ERPNext/Frappe
- E2E Framework: Cypress (official repo: frappe/erpnext_ui_tests)
- Unit Testing: Python unittest (FrappeTestCase)
- CI/CD: Tests run daily on GitHub Actions via cron
- Test Runner:
bench run-testswith targeting by app/doctype/module
Recommended Testing Architecture for Solanasis
solanasis_e2e_tests/
├── cypress/
│ ├── integration/
│ │ ├── core_erp/ # Smoke tests for core ERPNext features
│ │ ├── frappe_crm/ # CRM pipeline workflow tests
│ │ ├── solanasis_custom/ # Your custom module tests
│ │ ├── saas_management/ # Tenant provisioning, billing tests
│ │ └── whitelabel/ # Branding/theming validation
│ ├── fixtures/ # Test data
│ └── support/ # Helper functions, commands
├── unit_tests/
│ ├── test_solanasis_core.py
│ ├── test_crm_extensions.py
│ └── test_integrations.py
└── ci/
├── github-actions.yml # CI pipeline config
└── staging-deploy.yml # Staging environment setup
Testing Workflow
- On every PR: Unit tests + critical path E2E tests (< 10 min)
- Nightly: Full E2E suite against staging (30-60 min)
- Before release: Full E2E + manual QA + performance testing
- On upstream merge: Full E2E + regression suite against upgraded codebase
Critical Test Categories
- Upgrade Compatibility Tests — Run after every upstream merge to catch breaking changes
- Multi-Tenancy Tests — Verify tenant isolation, data separation, provisioning
- CRM Pipeline Tests — Lead capture → qualification → opportunity → closed/won
- Custom Module Tests — Every custom DocType, hook, and API endpoint
- White-Label Tests — Verify branding appears correctly per tenant
- Integration Tests — Cold email tool sync, webhook delivery, API auth
Pro Tip: The Upgrade Safety Net
Create a “golden path” E2E test that exercises every critical workflow in your SaaS. Run this against EVERY upstream version bump BEFORE merging. This is your single most important test — if it passes, your upgrade is likely safe. If it fails, you know exactly which workflow broke.
Community Sentiment
ERPNext — Reddit/Forum/HN Consensus
What people love:
- Truly 100% open source (no hidden enterprise edition)
- Unlimited users for self-hosted deployments
- Clean, intuitive UI once past initial setup
- Comprehensive feature set out of the box
- Strong customization when done via custom apps
What people complain about:
- Steep learning curve for initial setup and new modules (verified: G2 reviews confirm this widely)
- Documentation has significant gaps (verified: widespread complaint, though exact percentages are unverifiable)
- Customer support is slow/inconsistent (verified: G2 reviews confirm slow response times)
- Integration with external tools requires additional work (verified: common complaint on forums)
- Heavy customization makes upgrades unstable (verified: best practice is to keep customizations in separate apps)
- Duplication of business logic between Python and JavaScript
- v16 has critical bugs: link field generates broken navigation URLs (Issue #52864), scheduler NULL trap + timezone mismatch breaks background jobs (Frappe Issue #37490)
- v16 reception is mixed/negative — users report: “new UI is poor,” difficulty finding features, breaking changes from v15, container deployment issues
Red flags to watch:
- Support quality is lower than competitors
- If you customize heavily, plan your upgrade strategy carefully
- Don’t rely on Frappe/ERPNext community for fast bug fixes — be prepared to fix issues yourself
Tryton — Reddit/Forum Consensus
What people love:
- Stable, rarely significant downtime
- Good community support (responsive)
- Strong security features
- Scalable architecture by design
What people complain about:
- Documentation is “scarce” and “not good for beginners”
- Learning curve is steep, especially for advanced functionality
- Performance issues with searching and large datasets
- Not beginner-friendly
- Limited ecosystem compared to competitors
Key Insight from Community
The most common advice on Reddit for anyone building a SaaS on open source ERP: “Keep your customizations in separate modules/apps and never touch the core. The moment you modify core files, you’re in upgrade hell.” This aligns perfectly with the Frappe custom app approach.
AI Integration Strategy
The Vision: AI-Powered ERP/CRM as a Differentiator
This is where Solanasis can create massive differentiation. Most open source ERPs have zero or minimal AI integration. Building an “AI sidekick” into your forked platform — powered by Claude or similar models — would put you leagues ahead of competitors in the SMB/nonprofit space.
How Frappe Framework Supports AI Integration
Frappe’s architecture is well-suited for AI integration because:
- REST API everywhere — Every DocType has API endpoints, making it trivial for an AI agent to read/write data
- Webhook system — Trigger AI workflows on any document event (create, update, submit)
- Server Scripts (Python) — You can call AI APIs directly from backend logic
- Custom API endpoints — Build dedicated AI endpoints as part of your custom Frappe app
- Background jobs (Redis Queue) — Long-running AI tasks won’t block the UI
- Socket.IO real-time — Stream AI responses back to the UI in real-time
AI Integration Architecture
┌──────────────────────────────────┐
│ Solanasis Platform UI │
│ (Frappe + Custom Vue.js) │
│ │
│ ┌─────────────────────────────┐ │
│ │ AI Sidekick Chat Panel │ │
│ │ (embedded in every view) │ │
│ └──────────┬──────────────────┘ │
└─────────────┼────────────────────┘
│ WebSocket / REST
▼
┌──────────────────────────────────┐
│ solanasis_ai (Custom App) │
│ │
│ ├── AI Router (picks model/task) │
│ ├── Context Builder (gathers │
│ │ relevant DocType data) │
│ ├── Prompt Templates (per task) │
│ ├── Tool Definitions (for │
│ │ agent tool use) │
│ └── Response Handler (actions │
│ back to Frappe DocTypes) │
└──────────────┬───────────────────┘
│ API Calls
▼
┌──────────────────────────────────┐
│ AI Provider Layer │
│ │
│ ├── Claude API (Anthropic) │
│ ├── OpenAI API (fallback) │
│ └── Local models (future, for │
│ cost-sensitive tasks) │
└──────────────────────────────────┘
Concrete AI Use Cases for the Platform
For Solanasis Internal Use (Sales Pipeline):
- AI Lead Scoring — Analyze lead data, website behavior, email engagement to auto-score leads
- Email Draft Generation — Claude-powered cold email drafting personalized to each lead’s industry/role
- Meeting Prep Briefs — Auto-generate briefing docs before sales calls by pulling CRM data + web research
- Pipeline Insights — “Which deals are at risk?” “What should I follow up on today?”
- Data Entry Assistant — Natural language to CRM entries (“Log a call with John at Acme, they’re interested in security assessment”)
For Client-Facing SaaS Product:
- AI Operations Assistant — Embedded chat that can answer questions about their data (“What were our top expenses last quarter?“)
- Document Generation — AI-powered proposals, reports, SOWs generated from CRM/project data
- Anomaly Detection — Flag unusual patterns in accounting, inventory, or operations
- Workflow Suggestions — “Based on your data, here’s how to optimize your approval process”
- Natural Language Querying — Clients ask questions in plain English, AI translates to Frappe queries
- Smart Automation Builder — AI helps clients create workflow automations without coding
Using Claude Code / AI Coding Agents for Development
For building and maintaining the platform itself:
- Claude Code as Development Partner — Use Claude Code to write custom Frappe apps, DocTypes, hooks, and test suites
- Automated Code Review — AI reviews PRs against Frappe best practices
- Test Generation — AI generates E2E and unit tests from DocType definitions
- Documentation Generation — Auto-generate API docs and user guides from code
- Migration Scripts — AI-assisted data migration script writing for new client onboarding
For SOP-Driven Contractor Workflow:
Since you’re building SOPs for 1099 contractors, AI coding agents can:
- Auto-generate boilerplate code from SOP templates
- Validate contractor code submissions against standards
- Provide real-time guidance while contractors work
- Run automated QA checks before code review
Technical Implementation Plan
Phase 1 (Month 1-2): Foundation
- Build
solanasis_aicustom Frappe app - Implement Claude API integration with API key management
- Create basic chat interface embedded in Frappe UI
- Build context builder that pulls relevant DocType data for prompts
- Start with 2-3 use cases: email drafting, lead scoring, data entry assistant
Phase 2 (Month 3-4): Agent Capabilities
- Implement tool use / function calling so AI can take actions in the system
- Build tool definitions for common CRM operations (create lead, update deal, log activity)
- Add prompt templates for each use case
- Implement conversation history and context management
Phase 3 (Month 5-6): Client-Facing AI
- Package AI features for the SaaS offering
- Per-tenant AI configuration (usage limits, feature toggles)
- Build the natural language query engine for client data
- Add document generation capabilities
- Implement usage metering for AI features (cost management)
Cost Considerations
- Claude API (Sonnet 4.6): ~15/M output tokens — very cost-effective for business queries
- Per-tenant cost: Estimate $5-20/month in AI API costs per active tenant
- Pricing strategy: Bundle AI as a premium feature or include with usage caps
Pro Tip: AI as Your Wedge Differentiator
Most SMBs and nonprofits have never experienced AI integrated into their operational tools. An AI sidekick that can answer questions about their own data, draft emails, generate reports, and suggest optimizations is a massive “wow factor” that justifies premium pricing and reduces churn. This is exactly the kind of thing that makes Solanasis’s Responsible AI Implementation offering tangible rather than abstract.
Complete UI Reskinning & White-Labeling Strategy (CRITICAL)
THIS IS A TOP PRIORITY REQUIREMENT. Solanasis must be able to completely reskin the entire application to look like a modern, purpose-built SaaS product — NOT like ERPNext. The end product must appear to clients as if it’s Solanasis’s own proprietary ERP system. This is essential for reselling to clients and establishing the brand as a legitimate SaaS provider.
Why This Is Non-Negotiable
- Brand credibility — SMBs and nonprofits won’t pay premium prices for something that looks like a free open source tool with a logo swap
- Competitive positioning — You’re competing against polished SaaS products (HubSpot, Monday, Salesforce); the UI must match that quality bar
- Reseller model — If clients can Google “ERPNext” and find the free version, your value proposition collapses. The product must look and feel completely different
- Per-client white-labeling — Long-term, each client or reseller partner may want their own branding on the platform
Frappe’s Reskinning Capabilities — Honest Assessment
What Frappe gives you out of the box:
| Capability | Built-in? | How? |
|---|---|---|
| Logo/favicon swap | ✅ Yes | ERPNext Whitelabel module (single settings page) |
| Color theme changes | ✅ Yes | CSS variables + Tailwind classes |
| Hide “Powered by ERPNext” | ✅ Yes | Whitelabel module setting |
| Custom splash screen | ✅ Yes | Whitelabel module setting |
| Custom navbar title | ✅ Yes | Whitelabel module setting |
| Custom CSS injection | ✅ Yes | Whitelabel module + custom app hooks |
| Custom login page | ⚠️ Partial | Requires custom Jinja2 template override |
| Completely different layout | ❌ No | Requires custom Vue.js components |
| Redesigned navigation | ❌ No | Requires overriding Frappe’s desk layout |
| Custom component library | ❌ No | Requires building on Frappe UI (Vue 3 + Tailwind) |
| Per-tenant branding | ❌ No | Requires custom multi-tenant theme system |
The Reskinning Architecture
Solanasis needs a three-layer approach to achieve a fully modern, unrecognizable UI:
Layer 1: Branding (Week 1-2)
├── Logo, favicon, colors, fonts
├── ERPNext Whitelabel module for quick wins
├── Custom CSS overrides via hooks.py
└── Hide all ERPNext/Frappe branding
Layer 2: Theme System (Month 1-2)
├── Custom Frappe UI theme (Vue 3 + Tailwind)
├── Redesigned color palette, typography, spacing
├── Custom login/signup pages
├── Redesigned sidebar navigation
├── Modern card-based layouts vs ERPNext's table-heavy defaults
└── Dark mode support (differentiator — ERPNext doesn't have this natively)
Layer 3: Deep UI Redesign (Month 2-4)
├── Custom Vue.js page components for key workflows
├── Redesigned CRM pipeline (Kanban with custom cards)
├── Modern dashboard with data visualization (Recharts/D3)
├── Custom onboarding wizard for new client tenants
├── Mobile-responsive design overhaul
├── Per-tenant theme configuration (colors, logos, fonts per client)
└── Design system documentation for consistency
Technical Implementation Approach
1. Frappe UI Component Library (Your Foundation)
Frappe UI is a Vue 3 + Tailwind CSS component library maintained by Frappe. This is your starting point for building custom UI:
- Components: Button, Dialog, Input, TextInput, Autocomplete, Avatar, Badge, etc.
- Built on Tailwind CSS = easy to restyle with utility classes
- Already used by Frappe CRM and newer Frappe apps
- You can extend/override individual components without replacing the entire UI
2. Custom App Hooks for UI Overrides
In your solanasis_whitelabel custom app’s hooks.py:
# Override website templates
website_context = {
"favicon": "/assets/solanasis_whitelabel/images/favicon.ico",
"splash_image": "/assets/solanasis_whitelabel/images/splash.png",
}
# Inject custom CSS/JS on every page
app_include_css = "/assets/solanasis_whitelabel/css/solanasis-theme.css"
app_include_js = "/assets/solanasis_whitelabel/js/solanasis-overrides.js"
# Override Jinja2 templates
override_doctype_class = {
# Override specific DocType renderers
}
# Website page overrides
website_route_rules = [
{"from_route": "/login", "to_route": "solanasis_login"},
]3. CSS Variable Architecture (Quick Wins)
Frappe uses CSS variables that can be overridden globally:
:root {
/* Override Frappe's default colors */
--primary: #YOUR_BRAND_COLOR;
--primary-light: #YOUR_LIGHT_VARIANT;
--text-color: #YOUR_TEXT_COLOR;
--bg-color: #YOUR_BG_COLOR;
/* Override typography */
--font-stack: 'Your Font', -apple-system, sans-serif;
/* Custom Solanasis variables */
--solanasis-accent: #ACCENT_COLOR;
--solanasis-sidebar-bg: #SIDEBAR_BG;
--solanasis-card-radius: 12px;
}4. Per-Tenant Theming for Client Reselling
Build a Theme Configuration DocType in your custom app:
DocType: Solanasis Theme
Fields:
- tenant_site (Link to Site)
- primary_color (Color)
- secondary_color (Color)
- logo (Attach Image)
- favicon (Attach Image)
- font_family (Data)
- sidebar_style (Select: light/dark)
- custom_css (Code)
Load the theme CSS dynamically per tenant in your app’s boot script.
Design Inspiration & Benchmarks
The goal is to make the platform look like these modern SaaS products (not like a traditional ERP):
- Linear — Clean, minimal, fast-feeling UI with keyboard shortcuts
- Notion — Flexible layouts, beautiful typography, approachable
- Attio — Modern CRM with custom objects and beautiful data visualization
- Plane — Open source project management with a premium feel
What Makes a UI Feel “Modern” vs “Legacy ERP”
| Legacy ERP Feel (avoid) | Modern SaaS Feel (target) |
|---|---|
| Dense table views with 20+ columns | Card-based layouts with progressive disclosure |
| Gray/blue enterprise color palette | Vibrant but restrained brand colors |
| Small, cramped typography | Generous spacing, readable fonts (16px+ body) |
| Deep menu hierarchies | Flat navigation, command palette (Cmd+K) |
| Form-heavy data entry | Inline editing, smart defaults, auto-save |
| No animations | Subtle micro-interactions, smooth transitions |
| Desktop-only layout | Responsive, mobile-first approach |
| Generic icons | Custom iconography, illustrations |
Estimated Level of Effort
| Phase | Timeline | Effort | Result |
|---|---|---|---|
| Layer 1: Branding | 1-2 weeks | 1 person | Looks different but still “Frappe-like” |
| Layer 2: Theme System | 4-6 weeks | 1-2 people | Feels noticeably different, modern polish |
| Layer 3: Deep Redesign | 8-12 weeks | 2-3 people (frontend-heavy) | Completely unrecognizable as ERPNext |
| Per-Tenant Theming | 2-3 weeks | 1 person | Each client sees their own brand |
Pro Tips for Reskinning
- Start with Layer 1 immediately — even basic branding makes it feel “yours” from day one
- Hire a UI/UX designer (even as a contractor) — developer-designed UIs always look like developer-designed UIs. A designer will 10x the perceived quality for relatively low cost.
- Build a design system early — Document colors, typography, spacing, components in a Storybook or equivalent. This saves massive time when multiple people are building UI.
- Don’t fight Frappe’s layout for everything — Override the key pages (dashboard, CRM pipeline, login, onboarding) but let Frappe handle the admin/settings pages. 80/20 rule.
- Command palette is a quick win — Adding Cmd+K search (like Linear, Notion, Slack) immediately makes the app feel modern and premium. Frappe has
frappe.ui.toolbar.search()you can build on. - Dark mode is a premium signal — Implementing dark mode is relatively easy with CSS variables and signals “modern, polished product” to clients.
Risk: v16 UI Reception
The verification agents confirmed that ERPNext v16’s new UI has received mixed-to-negative reception from users. This is actually an OPPORTUNITY for Solanasis — you can build a better UI than the upstream project, making your fork more attractive than vanilla ERPNext. Key complaints to address in your redesign:
- Users find features hard to locate in v16’s new layout
- No customization options for the workspace
- Breaking changes from v15 frustrated existing users
Your custom UI that addresses these pain points becomes a competitive advantage.
Risk Assessment
| Risk | Probability | Impact | Mitigation |
|---|---|---|---|
| Upstream license change to AGPL | Low-Medium | High | Monitor Frappe announcements; your existing fork stays GPL v3 regardless |
| Heavy customization breaks on upgrade | Medium | High | Custom apps only, never modify core; comprehensive E2E test suite |
| Cold email integration complexity | Medium | Medium | Start with proven tools (Instantly.ai, Smartlead); build native module later |
| Multi-tenancy scaling issues | Low | Medium | Database-per-tenant architecture; horizontal scaling plan |
| Trademark enforcement by Frappe | Low | Medium | Never use “ERPNext” or “Frappe” in your product name |
| Team capacity for ERP customization | Medium-High | High | Start with minimal customization; leverage Frappe’s low-code capabilities |
| Community support inadequacy | Medium | Medium | Build internal expertise; budget for self-sufficiency |
| Client data migration complexity | Medium | Medium | Build standardized migration tooling as a custom app |
| UI reskinning scope creep | Medium-High | High | Phase the work (Layer 1→2→3); hire a UI/UX designer early; don’t try to redesign everything |
| Frappe CRM AGPL v3 license conflict | High | High | Build custom CRM on GPL v3 Frappe Framework OR accept AGPL obligations; get legal counsel |
| JavaScript distribution triggers GPL | Medium | High | Keep proprietary JS separate from GPL JS; document what’s GPL vs proprietary |
Clarifying Questions for Dmitri
Please review each question below and select your answer (or provide notes). These will shape the next phase of implementation planning.
Question 1: Primary Tech Stack Comfort
Why this matters: ERPNext uses Python/JavaScript/Vue.js; Tryton is Python-only; Odoo is Python; OFBiz is Java. Your team’s comfort with the stack directly impacts development speed and ability to customize deeply.
Why Option A is recommended: Python + JS/Vue.js (Frappe’s stack) is the most versatile for web SaaS development and has the largest talent pool for 1099 contractors.
- A) Python + JavaScript/Vue.js (Frappe/ERPNext stack) — Modern, large talent pool, full-stack web development
- B) Python only (Tryton) — Simpler stack but limits frontend customization
- C) PHP (Dolibarr) — Widely known but less suited for complex SaaS
- D) Java (OFBiz/iDempiere) — Enterprise-grade but steeper learning curve, smaller contractor pool
Notes: _______________________________________________
Question 2: SaaS Multi-Tenancy Model
Why this matters: This affects data isolation, cost per tenant, compliance posture, and architectural complexity. Since your clients are SMBs and nonprofits, they may have varying data sensitivity requirements.
Why Option A is recommended: Database-per-tenant gives the strongest data isolation story for selling to organizations that care about data privacy (which is part of Solanasis’s value proposition as an operational resilience partner).
- A) Database-per-tenant — Each client gets their own database. Best isolation, slightly more expensive, easier compliance story.
- B) Shared database with site separation — Frappe’s native approach. More efficient, less isolation. Good for getting started fast.
- C) Hybrid — Start with shared, migrate high-value clients to dedicated. More complex to manage.
- D) Not sure yet — Need to understand client needs better first
Notes: _______________________________________________
Question 3: Cold Email/Outreach Tool Strategy
Why this matters: No open source ERP has enterprise-grade cold email built in. You need to decide whether to integrate with a dedicated tool or build your own from the start.
Why Option A is recommended: Using a proven tool immediately lets you start your pipeline now while you build a native solution over time. Building from scratch would delay your outreach by months.
- A) Integrate with a dedicated tool now (Instantly.ai, Smartlead, etc.), build native module later — Fastest path to pipeline, recurring tool cost ($50-200/mo)
- B) Build a native cold email module on Frappe from day one — Full control, no recurring cost, but 2-4 months to build properly
- C) Use n8n (self-hosted automation) to bridge Frappe CRM with SMTP providers — Middle ground, more control than SaaS tool, faster than building native
- D) Stick with a simple approach (Baserow + email tool) until the ERP is fully set up — Defer the CRM migration
Notes: _______________________________________________
Question 4: AWS vs Azure for Primary Hosting
Why this matters: Both work fine, but your credit balance and existing familiarity should drive the decision. Some services differ in pricing and capabilities.
Why Option A is recommended: AWS has better MariaDB support (RDS), more Frappe community deployment guides, and generally more flexibility for containerized workloads.
- A) AWS — Better MariaDB support (RDS), more ERPNext community deployment docs, larger ecosystem
- B) Azure — Better if you have more credits here, good if clients are Microsoft-ecosystem shops
- C) Split — Production on one, staging/dev on the other to use both credit pools
- D) Start with a simpler setup (single VPS like Hetzner/DigitalOcean) and migrate to AWS/Azure later — Cheapest to start, migration cost later
Notes: _______________________________________________
Question 5: Initial SaaS Scope
Why this matters: ERPNext has 15+ modules. Trying to customize and offer everything as SaaS from day one would be overwhelming. Starting focused is smarter.
Why Option A is recommended: CRM + Project Management aligns directly with Solanasis’s consulting/services model and lets you dogfood your own product while building the SaaS.
- A) CRM + Project Management first — Aligns with your consulting services model, manageable scope
- B) CRM + Accounting + HR — Broader offering but more complexity to customize and support
- C) Full ERP from day one — Maximum offering but highest risk of scope creep
- D) CRM only — Minimal scope, fastest to market, but limited differentiation from existing CRM SaaS products
Notes: _______________________________________________
Question 6: White-Labeling Depth
Why this matters: Determines how much frontend customization work is needed before you can put the product in front of clients.
Why Option A is recommended: Custom branding with standard UI gives you a professional look quickly. Deep UI redesign would delay launch by months and require dedicated frontend developers.
- A) Custom branding (logo, colors, domain) but keep standard Frappe UI layout — Fast, professional, minimal frontend work
- B) Deep UI redesign — completely custom look and feel — Premium feel, but 3-6 months of frontend work
- C) Different branding per client (full white-label) — Each client sees their own brand. Adds complexity but valuable for resellers.
- D) Start unbranded, add white-labeling later — Fastest to market, looks less professional initially
Notes: B - need to make it look modern and differentiated with modern UI/UX _______________________________________________
Question 7: Forking Approach
Why this matters: Impacts your ability to pull upstream updates, your IP separation clarity, and how contractors work with the codebase.
Why Option A is recommended: Custom Frappe apps on top of unmodified core is the officially recommended approach, keeps your IP cleanly separated, and makes upstream merges trivial. This is the most “smartcuts” approach — leverage the upstream work, layer your value on top.
- A) Custom Frappe apps on top of unmodified ERPNext/Frappe core — Cleanest upgrade path, clear IP boundary, officially recommended approach
- B) Hard fork with core modifications — Maximum control, but upgrade hell and GPL compliance gets murky
- C) Hybrid — custom apps for most things, selective core patches for critical needs — Pragmatic middle ground, requires discipline to track patches
- D) Don’t fork at all — use Frappe Cloud hosting and build custom apps as add-ons — Simplest path, but less control over infrastructure
Notes: C - need to be able to rework certain parts and keep track of all of our core changes_______________________________________________
Question 8: Timeline Priority
Why this matters: Shapes whether to optimize for speed-to-market or thoroughness of customization.
Why Option A is recommended: Getting your own pipeline running on Frappe CRM first lets you dogfood the platform, understand its strengths/weaknesses, and start building pipeline immediately while developing the SaaS offering in parallel.
- A) Get Solanasis’s own CRM/pipeline running on Frappe CRM within 30 days, then build SaaS offering in parallel — Dogfood first, SaaS second
- B) Build the SaaS platform first (3-6 months), then migrate Solanasis to it — More polished initial offering
- C) Run both tracks simultaneously from day one — Aggressive but requires more bandwidth
- D) Prototype with a managed ERPNext host first, then decide on self-hosting — Lowest initial effort, delayed learning
Notes: _______________________________________________
Question 9: AI Integration Approach
Why this matters: AI integration is a major differentiator but also a significant development effort. The approach you choose affects timeline, cost, and the value you deliver to clients.
Why Option A is recommended: Building a dedicated Frappe app for AI gives you full control over the integration, clean separation of concerns, and the ability to iterate independently. Starting with Claude API is the fastest path to a working AI sidekick.
- A) Build a custom
solanasis_aiFrappe app with Claude API integration — Full control, clean architecture, iterative rollout of AI features - B) Use an existing AI chatbot framework (like Rasa or Botpress) embedded in Frappe — Pre-built conversation management, but adds another dependency
- C) Build MCP (Model Context Protocol) server for Frappe — Claude Code / desktop Claude could connect directly to your ERP data. Cutting-edge, but newer technology.
- D) Start with simple AI features (email drafting, summarization) via server scripts, build a full AI layer later — Lowest effort, fastest to demo, less architectural planning upfront
Notes: _______________________________________________
Question 10: AI Cost Model for SaaS Clients
Why this matters: AI API costs are real and per-tenant. You need to decide how to handle this in your pricing model.
Why Option A is recommended: Including AI with usage caps lets you market AI as a core feature (differentiator) while protecting against runaway costs. You can monetize heavy users with premium tiers.
- A) Include AI features with usage caps (e.g., 500 AI queries/month), premium tier for unlimited — AI as a core differentiator, sustainable cost model
- B) AI as a paid add-on module — Only clients who want it pay for it, simpler cost management
- C) All-inclusive pricing (absorb AI costs) — Simplest for clients, but you eat the API costs
- D) Usage-based pricing (per AI query) — Most fair, but unpredictable bills scare SMB clients
Notes: _______________________________________________
Appendix: Additional Considerations for a Small Team SaaS
Contractor/1099 Developer Onboarding
Since Solanasis will rely on 1099 contractors following SOPs, the Frappe development environment needs:
- Standard dev environment: Docker-based local setup so every contractor has an identical environment in minutes
- Branch strategy:
main(production) →staging(QA) →feature/*branches per task - Code review: All PRs require review before merge — AI-assisted code review can help here
- Secrets management: Use environment variables or a vault (AWS Secrets Manager / Azure Key Vault) — never commit API keys
- Onboarding SOP: Step-by-step guide: fork the repo → set up Docker → run tests → make first PR
Data Migration Tooling (Critical for Client Onboarding)
Every new client means migrating data from their existing systems. Build a standardized solanasis_migrations Frappe app:
- CSV/Excel import templates per DocType
- Validation rules that catch bad data before import
- Rollback capability (snapshot before migration, restore on failure)
- Migration audit log (what was imported, from where, by whom)
- Pre-built connectors for common sources: QuickBooks, Salesforce, HubSpot, Google Sheets
SaaS Operations & Support
- Use Frappe Desk (already in the ecosystem) as your support ticketing system
- Define SLA tiers aligned with pricing (e.g., 24hr response for standard, 4hr for premium)
- Build a self-serve knowledge base for common questions
- Client communication: monthly check-ins, release notes, feature announcements
Security & Compliance Roadmap
Given Solanasis’s positioning as an operational resilience partner, security credibility is essential:
- Phase 1: Basic security hygiene — encrypted connections (TLS), database encryption at rest, regular backups, role-based access control (built into Frappe)
- Phase 2: SOC 2 Type I preparation — document policies, access controls, incident response plan
- Phase 3: SOC 2 Type II audit — demonstrate controls operating over time
- GDPR/CCPA: Build data subject request handling into the platform (export, delete)
- Data residency: Use AWS/Azure region selection to keep client data in required jurisdiction
Competitive Differentiation (Why Solanasis vs DIY ERPNext)
The key question clients will ask: “Why pay Solanasis when ERPNext is free?”
Answer — Solanasis delivers value through:
- Completely custom, modern UI — Looks and feels like a premium SaaS product, not a free open source tool. Clients will never know it’s ERPNext under the hood.
- AI-powered operations — Built-in AI sidekick that no self-hosted ERPNext has
- Managed & optimized — We handle hosting, upgrades, security, backups
- Industry-specific customization — Pre-configured for SMB/nonprofit workflows
- Operational resilience expertise — Cybersecurity assessments, DR, and data migration bundled with the platform
- White-glove onboarding — Data migration + training + ongoing support
- Integration suite — Pre-built connectors for the tools SMBs actually use
- The “lovable” factor — Personable team, clear SOPs, responsive support
This is the full stack of value that justifies SaaS pricing over self-hosting.
Verification Report: Fact-Check Results
All claims in this document were independently verified by dedicated verification agents checking primary sources (GitHub repos, official documentation, license texts, court records, pricing pages, Reddit, G2 reviews, and community forums). Below is the consolidated verification summary.
Corrections Applied Based on Verification
| Original Claim | Issue Found | Correction Applied |
|---|---|---|
| ERPNext: “10,611 stars” | Stars/forks were reversed | Corrected to ~32,152 stars, ~10,611 forks |
| Frappe: “4,718 stars” | Stars/forks were reversed | Corrected to ~9,780 stars, ~4,718 forks |
| GPL v3 “Section 6” quote | Quote is in Section 0 (Definitions), not Section 6 | Corrected to Section 0 |
| Orange case: “€800,000” | Actual total was €860,000 | Corrected with full breakdown |
| ”Require CLAs” | CLAs are optional, not required for GPL v3 | Changed to “Consider CLAs or DCOs” with explanation |
| AWS RDS cost: ”~$65/month” | Actual: ~$80.30/month | Corrected; total revised to ~$195-210/month |
| PostgreSQL support | ERPNext requires MariaDB for production | Added clarification that PostgreSQL is Frappe Framework only |
| Tryton: “No Kanban boards” | Kanban views ARE available in Tryton | Corrected |
| iDempiere: “410 stars” | Actual: ~431 stars | Minor correction noted |
| ”75% of users report doc gaps” | Percentage unverifiable | Removed specific percentage |
| ”G2 rating 6.3/10 for support” | Specific rating unverifiable | Removed specific rating; kept verified complaint |
| ”Breaks above 50 recipients” | Specific threshold unverifiable | Removed; kept verified unsubscribe bug (Issue #52448) |
| Frappe CRM license | Frappe CRM is AGPL v3, NOT GPL v3 | Added critical warning about AGPL implications for SaaS |
| Azure Cache for Redis | Being retired Sept 2028 | Updated to recommend Azure Managed Redis |
| Multi-tenancy: “port-based” | DNS-based is more common in production | Added DNS-based as the standard production approach |
| ERPNext v16 reception | Not mentioned originally | Added mixed/negative user reception with specific complaints |
Claims Verified as Accurate
- ✅ ERPNext license: GPL-3.0-only (confirmed via GitHub LICENSE file)
- ✅ Frappe Framework license: GPL-3.0 (confirmed via GitHub)
- ✅ 171+ apps in Frappe ecosystem (confirmed via awesome-frappe.gavv.in)
- ✅ 22k+ forum users (confirmed via discuss.frappe.io)
- ✅ Frappe CRM launched 2023 with WhatsApp, Twilio, Exotel, email sync (confirmed via official docs)
- ✅ ERPNext Whitelabel module exists and works as described (confirmed via Frappe Cloud Marketplace)
- ✅ Cypress E2E tests in frappe/erpnext_ui_tests (confirmed via GitHub)
- ✅ v16 EOL: End of 2029 (confirmed via GitHub wiki Supported-Versions)
- ✅ Resource requirements: 8GB RAM DB, 400MB/bench, 2N+1 workers (confirmed via official docs)
- ✅ Multi-tenancy: port-based and DNS-based both supported (confirmed via frappe_docker docs)
- ✅ DocType REST API auto-generation (confirmed via Frappe REST API docs)
- ✅ Odoo CE: LGPL v3, 48.5k stars, 31.1k forks (confirmed via GitHub)
- ✅ Odoo CE vs Enterprise feature gap: all listed gaps confirmed (Studio, workflows, inventory, mobile, AI lead scoring)
- ✅ OCA: Founded 2014, 4,500+ modules, 1,500 contributors (confirmed via odoo-community.org)
- ✅ Axelor: AGPL v3, 927 stars (confirmed via GitHub and official site)
- ✅ Apache OFBiz: Apache 2.0, v24.09.05 released Jan 20, 2026 (confirmed)
- ✅ Dolibarr: 6.7k stars, 3.2k forks (confirmed via GitHub)
- ✅ Tryton: GPL v3.0-or-later, v7.8.1 released Dec 20, 2025, Heptapod/Mercurial hosting (all confirmed)
- ✅ Tryton performance issues with large tables (confirmed via discuss.tryton.org)
- ✅ GPL v3 SaaS loophole: accurate quote, correct legal interpretation (confirmed via license text and legal analyses)
- ✅ AGPL v3 Section 13 closes the SaaS loophole (confirmed via FSF and license text)
- ✅ Apache 2.0 permissiveness for proprietary SaaS (confirmed via license text)
- ✅ ERPNext trademark restrictions on domain/product names (confirmed via TRADEMARK_POLICY.md)
- ✅ ERPNext CRM unsubscribe bug (confirmed: GitHub Issue #52448)
- ✅ ERPNext v16 scheduler bug (confirmed: Frappe GitHub Issue #37490)
- ✅ ERPNext v16 link field bug (confirmed: GitHub Issues #52864, #35354)
- ✅ Tryton documentation quality complaints (confirmed: discuss.tryton.org, Capterra reviews)
Legally Ambiguous Areas Flagged
-
JavaScript in SaaS = distribution? — Serving GPL-licensed JavaScript to browsers IS generally considered distribution, triggering GPL obligations. However, serving proprietary JS that communicates with a GPL backend does NOT trigger obligations. The line depends on which code is GPL-licensed. Recommendation: Get legal counsel on this specific point.
-
AGPL + GPL mixing — GPL v3 and AGPL v3 are compatible per Section 13 of both licenses. However, when combined, the stricter AGPL network-disclosure requirements apply to the combined work. This is particularly relevant since Frappe CRM is AGPL v3. Recommendation: Either build your own CRM module on GPL v3 Frappe Framework, or accept AGPL obligations.
-
“Fork stays GPL v3 forever” — Essentially correct for any fork that accepts external contributions. Technically, if you are the sole copyright holder, you can relicense — but this is impossible once contractors contribute code. Recommendation: Treat as permanent.
Verification Sources Used
- GitHub repositories: frappe/erpnext, frappe/frappe, frappe/frappe_docker, frappe/erpnext_ui_tests, tryton/trytond, odoo/odoo, axelor/axelor-open-suite, Dolibarr/dolibarr, idempiere/idempiere, apache/ofbiz-framework
- License texts: GPL v3, AGPL v3, LGPL v3, Apache 2.0 (gnu.org, apache.org)
- Legal analyses: DLA Piper (Orange v. Entr’Ouvert), Mend.io, Revenera, FOSSA, Software Freedom Law Center
- Official documentation: docs.frappe.io, tryton.org, odoo.com/documentation
- Community forums: discuss.frappe.io, discuss.tryton.org, G2.com, Capterra, Reddit
- Pricing: AWS pricing calculator, Vantage instances.vantage.sh, Economize Cloud
- Court records: Orange v. Entr’Ouvert (Paris, Feb 14, 2024)
Self-Hosting Section Verification (Round 2)
| Claim | Status | Correction |
|---|---|---|
| Cloudflare Tunnel completely free, no limits | ✅ Verified | — |
| WSL2 ~20x better I/O performance | ⚠️ Partially correct | Changed to “5-20x” range; varies by operation type |
| Xfinity ToS prohibits servers | ✅ Verified | — |
| Xfinity 1.2TB/month data cap | ❌ Outdated | Corrected: Xfinity removed data caps in 2025 for new plans |
| Cloudflare Tunnel ~50-200ms latency | ⚠️ Partially correct | Typical is 15-45ms; extremes can reach 500ms+ |
| frappe_docker supports WSL2 for dev & prod | ⚠️ Partially correct | Added note: officially supported for dev only, not recommended for production |
| Cloudflare free tier Auto Minify | ❌ False | Corrected: Auto Minify deprecated Aug 2024; use build pipeline instead |
| ERPNext 2+ hours slow on WSL2 | ✅ Verified | GitHub Issue #1365 confirmed |
| Xfinity blocks ports 25, 80, 443 | ⚠️ Partially correct | Port 25 blocked; 80 NOT officially blocked; 443 inconsistent. Corrected. |
| Tunnel maintains 4+ connections | ⚠️ Clarified | Exactly 4 connections to 2+ data centers by default; up to 25 replicas |
Dmitri’s Answers & Strategy Updates
Q6 Answer: B — Deep UI Redesign
Dmitri chose Option B: Deep UI redesign — completely custom look and feel. This confirms that the UI/UX overhaul is a top priority. The Solanasis platform must be completely unrecognizable as ERPNext. This means:
- Layer 3 (Deep Redesign) is NOT optional — it’s the target state
- Budget 8-12 weeks of frontend-heavy work (2-3 people including a UI/UX designer)
- Design system first — before writing any custom Vue.js components, establish the design language
- Solanasis brand palette is already defined (Navy #020532, Parchment FEF9F1, Copper C47A3D) — this becomes the foundation of the theme
- Still start with Layer 1 (branding) immediately, but plan and execute all three layers
Q7 Answer: C — Hybrid Forking (Custom Apps + Selective Core Patches)
Dmitri chose Option C: Hybrid — custom apps for most things, selective core patches for critical needs. This is pragmatic. Implementation approach:
- 95% of work in custom Frappe apps (solanasis_core, solanasis_whitelabel, etc.)
- 5% selective core patches — only when absolutely necessary (e.g., deep UI layout changes that can’t be done via hooks)
- Patch tracking system required: Maintain a
CORE_PATCHES.mdfile that documents every core modification with:- File path modified
- What was changed and why
- Upstream issue/PR reference (if applicable)
- Reapply instructions for next upstream version
- Rebase strategy: When upstream releases a new version, reapply patches from
CORE_PATCHES.md— this is where E2E tests are critical - Minimize core patches aggressively — every core patch is tech debt. Before patching core, exhaust all alternatives (hooks, monkey-patching, custom app overrides)
Self-Hosting Guide: Windows WSL2 + Docker + Cloudflare Tunnel
Context: Dmitri has a Windows machine with WSL2 and Docker Engine, and Xfinity internet in Boulder, CO. This section covers how to self-host ERPNext at home to avoid cloud costs, using Cloudflare Tunnel for secure internet access.
Architecture Overview
Internet Users
│
▼
┌──────────────────────────┐
│ Cloudflare Edge (CDN) │ ← Free tier: SSL, caching, DDoS protection
│ + Cloudflare Tunnel │ ← Free: no open ports needed
└──────────┬───────────────┘
│ Encrypted outbound tunnel
▼
┌──────────────────────────┐
│ Dmitri's Windows Machine │
│ ┌─────────────────────┐ │
│ │ WSL2 │ │
│ │ ┌────────────────┐ │ │
│ │ │ Docker Engine │ │ │
│ │ │ │ │ │
│ │ │ ┌───────────┐ │ │ │
│ │ │ │ cloudflared│ │ │ │ ← Tunnel connector (free)
│ │ │ └───────────┘ │ │ │
│ │ │ ┌───────────┐ │ │ │
│ │ │ │ ERPNext │ │ │ │ ← Frappe + ERPNext app
│ │ │ │ (Gunicorn)│ │ │ │
│ │ │ └───────────┘ │ │ │
│ │ │ ┌───────────┐ │ │ │
│ │ │ │ MariaDB │ │ │ │ ← Database
│ │ │ └───────────┘ │ │ │
│ │ │ ┌───────────┐ │ │ │
│ │ │ │ Redis │ │ │ │ ← Cache + Queue
│ │ │ └───────────┘ │ │ │
│ │ └────────────────┘ │ │
│ └─────────────────────┘ │
│ ┌─────────────────────┐ │
│ │ UPS │ │ ← Recommended: 1-2 kVA (~$200)
│ └─────────────────────┘ │
└──────────────────────────┘
Step-by-Step Setup Guide
Prerequisites:
- Windows 10/11 with WSL2 enabled
- Docker Desktop or Docker Engine in WSL2
- Cloudflare account (free) with a domain
- Minimum 8GB RAM on host machine (16GB recommended)
- SSD storage (HDD will be painfully slow)
Step 1: Prepare WSL2 for Optimal Performance
# CRITICAL: Store ALL project files in the WSL2 filesystem, NOT /mnt/c/
# This gives ~20x better I/O performance
cd ~
mkdir -p erpnext-home
cd erpnext-homePro Tip: The #1 performance mistake people make with WSL2 + Docker is storing files on the Windows filesystem (/mnt/c/). Docker file operations are dramatically slower (benchmarks vary but can be 5-20x slower depending on the operation) on Windows NTFS mounts vs the native ext4 filesystem inside WSL2. Always keep your Docker volumes and project files in the WSL2 home directory. Note: frappe_docker officially supports WSL2 for development, but production on WSL2 is not officially recommended — use it for dev/staging and cloud for production.
Step 2: Clone frappe_docker
git clone https://github.com/frappe/frappe_docker.git
cd frappe_dockerStep 3: Configure for Production
Use the production Docker Compose setup from frappe_docker. Key configuration:
# docker-compose.yml (simplified — use official production config)
services:
erpnext:
image: frappe/erpnext:v16
ports:
- "8080:8080"
volumes:
- sites:/home/frappe/frappe-bench/sites
depends_on:
- mariadb
- redis-cache
- redis-queue
mariadb:
image: mariadb:10.6
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- mariadb-data:/var/lib/mysql
redis-cache:
image: redis:alpine
redis-queue:
image: redis:alpine
cloudflared:
image: cloudflare/cloudflared:latest
command: tunnel run
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
volumes:
sites:
mariadb-data:Step 4: Create Cloudflare Tunnel
- Go to https://dash.teams.cloudflare.com → Networks → Tunnels
- Create a tunnel, give it a name (e.g., “solanasis-home”)
- Copy the tunnel token
- Add to your
.envfile:CLOUDFLARE_TUNNEL_TOKEN=your-token-here - Configure public hostname:
erp.yourdomain.com→http://erpnext:8080
Step 5: Configure Multi-Site (Multi-Tenant) via Tunnel
Single tunnel, multiple sites:
# Cloudflare Tunnel ingress rules (configured in dashboard or config.yml)
ingress:
- hostname: erp.solanasis-internal.com
service: http://erpnext:8080
- hostname: staging.solanasis-internal.com
service: http://erpnext-staging:8080
- hostname: client1.yoursaas.com
service: http://erpnext:8080 # Frappe DNS multi-tenancy handles routing
- service: http_status:404CDN Strategy with Cloudflare Free Tier
What Gets Cached (Free):
| Asset Type | Cached? | TTL | Impact |
|---|---|---|---|
| CSS files (/assets/*.css) | ✅ Yes | 1 year (versioned) | Major — reduces bandwidth |
| JavaScript (/assets/*.js) | ✅ Yes | 1 year (versioned) | Major — faster page loads |
| Images (/files/*) | ✅ Yes | 30 days | Major — uploaded images served from edge |
| Fonts (/assets/fonts/*) | ✅ Yes | 1 year | Moderate — fewer requests |
| HTML pages | ❌ No (dynamic) | N/A | Can’t cache — dynamic content |
| API responses | ❌ No | N/A | Should not cache — real-time data |
Configuration in Frappe:
// common_site_config.json
{
"serve_default_site": true,
"dns_multitenant": true
}Cloudflare Dashboard Settings:
- Caching → Cache Rules → Create rule for
/assets/*with Edge TTL of 1 month Speed → Auto MinifyDEPRECATED — Cloudflare removed Auto Minify in August 2024. Instead, handle minification in your build pipeline (e.g., Frappe’s asset bundler already minifies in production mode)- Speed → Brotli → Enable
- Speed → Early Hints → Enable
- SSL → Full (Strict)
Expected Performance Improvement:
- Static asset load: 30-50% faster (served from nearest Cloudflare edge)
- Total page load (first visit): ~2-4 seconds (vs 3-6 without CDN)
- Subsequent visits: ~1-2 seconds (browser cache + CDN)
Xfinity ISP Reality Check
The Hard Truth:
| Concern | Status | Mitigation |
|---|---|---|
| ToS violation | ⚠️ Running servers violates residential Xfinity ToS | Cloudflare Tunnel makes it invisible (no open ports), but technically still violates ToS |
| Upload speed | ⚠️ 10-35 Mbps typical | Sufficient for <50 concurrent users with CDN offloading static assets |
| Dynamic IP | ✅ Not an issue | Cloudflare Tunnel handles this — no DNS updates needed |
| Port blocking | ✅ Not an issue with Tunnel | Xfinity blocks port 25 (SMTP); ports 80/443 are NOT officially blocked but some users report inconsistent blocking. Cloudflare Tunnel bypasses all of this since it uses outbound HTTPS only |
| Data caps | ✅ Xfinity removed data caps in 2025 — new plans have unlimited data (verify your specific plan; some legacy/grandfathered plans may still have the old 1.2TB cap) | Should not be an issue on current plans |
| Reliability | ❌ No SLA | ISP outage = your SaaS is down |
Recommendation: For development and staging, residential Xfinity is fine. For production SaaS, consider upgrading to Comcast Business ($150/month) which explicitly allows servers and provides an SLA.
Production Hardening for Home Server
1. Automated Backups
# Cron job: backup every 6 hours, sync to S3
0 */6 * * * docker exec erpnext bench --site all backup
0 1 * * * rclone sync ~/erpnext-home/backups s3:solanasis-backups/2. UPS Configuration
- Buy a 1-2 kVA UPS (~$200, e.g., APC Back-UPS Pro 1500)
- Install
apcupsdin WSL2 for monitoring - Configure graceful Docker shutdown on battery low:
# /etc/apcupsd/apccontrol
# On battery low: gracefully stop containers
docker compose -f ~/erpnext-home/docker-compose.yml down3. Auto-Recovery After Power/Restart
# Add to WSL2 /etc/wsl.conf or Windows Task Scheduler
# Auto-start Docker containers on WSL boot
[boot]
command = "docker compose -f /home/dmitri/erpnext-home/docker-compose.yml up -d"4. Monitoring Stack (Free)
- Uptime Kuma (self-hosted, in Docker): HTTP monitoring + alerts
- ntfy.sh (free push notifications): Alert to phone when services go down
- Healthchecks.io (free tier): Cron job monitoring for backups
5. Windows Update Protection
# Disable automatic restarts (Group Policy)
# Computer Configuration → Admin Templates → Windows Components → Windows Update
# Configure: "No auto-restart with logged on users for scheduled updates" → EnabledCost Comparison: Home vs Cloud
| Setup | Monthly Cost | Uptime | Best For |
|---|---|---|---|
| Home only (residential Xfinity) | ~60 + electricity $30) | 95-98% | Dev/staging, personal use |
| Home + Comcast Business | ~150 + electricity 30) | 98-99% | Internal tools, early SaaS clients who tolerate some downtime |
| Hybrid: Home staging + Cloud prod | ~90 + cloud $190) | 99.5%+ for prod | Recommended — best of both worlds |
| Cloud only (AWS/Azure with credits) | ~$195-210 (covered by credits initially) | 99.9% | When credits last, this is the winner |
Recommended Approach: The Hybrid Play
Given that you have AWS/Azure credits AND a home server:
-
Home Server (WSL2 + Docker + Cloudflare Tunnel):
- Development environment
- Staging/testing environment
- Local AI model experimentation
- Build and test custom Frappe apps
- Cost: ~$0 incremental (you already have the machine and internet)
-
Cloud (AWS/Azure, using credits):
- Production SaaS environment
- Client-facing deployments
- Automated backups, monitoring, scaling
- Cost: 195-210/month
-
Cloudflare (Free tier for both):
- CDN for static assets (prod and staging)
- Tunnel for home server access
- SSL/TLS for both environments
- DDoS protection
This gives you the ability to develop for free at home, test without cloud costs, and deploy to reliable cloud infrastructure for clients.
Pro Tips for Home Hosting
- Use WSL2 native filesystem — store everything under
/home/, NOT/mnt/c/. This is the single biggest performance win (~20x faster I/O). - Pin your Docker images — use
frappe/erpnext:v16.x.xnotlatestto avoid surprise breaking changes - Test your backup restore process — a backup you’ve never restored is not a backup
- Monitor your Xfinity data cap — 1.2TB/month sounds like a lot but video calls + backups + updates add up
- Set up WoL (Wake on LAN) — if your machine sleeps, you can wake it remotely via Cloudflare Access + a WoL trigger
- Create a recovery runbook — document every step to rebuild from scratch. When (not if) something breaks at 2am, you want a checklist, not a debugging session.
Next Steps: Detailed Planning Documents Needed
Based on all research and Dmitri’s answers, the following detailed planning documents should be created as separate deep-dive artifacts:
1. UI/UX Deep Planning Document (HIGH PRIORITY)
- Complete design system specification using Solanasis brand palette
- Wireframes for key pages (dashboard, CRM pipeline, login, onboarding)
- Vue.js component architecture for custom Frappe UI overrides
- Design benchmark analysis (Linear, Notion, Attio, Plane)
- Per-tenant theming technical specification
- Dark mode implementation plan
- Timeline with milestones and resource allocation
- Contractor/designer requirements and job description
2. Technical Architecture Document
- Complete infrastructure diagram (home + cloud hybrid)
- Docker Compose configurations for dev, staging, and production
- Cloudflare Tunnel setup with multi-tenant routing
- CI/CD pipeline design (GitHub Actions)
- Database schema extensions for custom DocTypes
- API design for integrations (cold email, AI, etc.)
3. Licensing & Compliance Playbook
- Detailed GPL v3 compliance checklist
- AGPL v3 risk mitigation plan (avoiding Frappe CRM dependency)
- JavaScript distribution audit
- Trademark usage guidelines
- Contractor IP assignment agreements
- Legal counsel engagement plan
4. E2E Testing Master Plan
- Cypress test architecture
- Golden path test definitions
- Upgrade compatibility test suite
- Performance benchmarks and thresholds
- CI/CD integration and nightly run schedule
5. CRM Module Build Specification
- Custom CRM DocTypes (built on GPL v3 Frappe Framework, NOT Frappe CRM)
- Pipeline stages and workflow
- Cold email integration architecture
- Lead scoring algorithm design
- Email sync and logging approach
This document will be updated based on Dmitri’s answers to the remaining clarifying questions. Next steps: implementation roadmap, architecture decision records (ADRs), and sprint plan for Phase 1.