Fusionaly-oss fusionaly-boundaries
Use when working on Fusionaly OSS or Pro - enforces clean separation between repos, prevents Pro features in OSS, forbids modifying OSS from Pro
install
source · Clone the upstream repo
git clone https://github.com/karloscodes/fusionaly-oss
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/karloscodes/fusionaly-oss "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/fusionaly-boundaries" ~/.claude/skills/karloscodes-fusionaly-oss-fusionaly-boundaries && rm -rf "$T"
manifest:
.claude/skills/fusionaly-boundaries/SKILL.mdsource content
Fusionaly Boundaries
Overview
Fusionaly has two repos with strict boundaries. OSS is the open-source core. Pro extends OSS via git submodule without modifying it.
Repository Structure
fusionaly-oss/ # Standalone open-source product ├── app/ # Public API (Pro imports from here) ├── internal/ # OSS internals (Pro cannot import) └── web/src/ # OSS React components fusionaly-pro/ # Commercial extension ├── oss/ # Git submodule → fusionaly-oss (READ-ONLY!) ├── internal/ # Pro-only code └── web/src/ # Pro React components
The Rules
When Working in OSS
| ✅ Do | ❌ Don't |
|---|---|
| Keep it fully standalone | Add AI/LLM features |
Export via package | Add license validation |
| Provide extension points | Reference Pro repo |
Test with | Add "Pro" conditionals |
OSS must work without Pro. No AI, no licensing, no Pro feature flags.
When Working in Pro
| ✅ Do | ❌ Don't |
|---|---|
Import from | Import from |
| Override routes (Pro first) | Modify files in |
| Extend via props/hooks | Add functions to OSS "for Pro" |
Test with | Commit OSS changes from Pro |
Pro extends OSS via public API only. Never edit the submodule directly.
Import Rules (Pro)
// ✅ GOOD import "fusionaly/app" // ❌ FORBIDDEN import "fusionaly/internal/analytics"
Red Flags - STOP
In OSS, stop if you're adding:
- OpenAI or LLM integration
- License key handling
- AI insights or Lens features
- "Pro" in any name
In Pro, stop if you're:
- Editing any file in
./oss/ - Importing from
fusionaly/internal/* - Adding exports to OSS for Pro's benefit
Extension Pattern
OSS provides hooks, Pro uses them:
// OSS: Provides extension point func HandleDashboardWithExtension(ctx, component string, extender func(props) props) error { props := buildProps(ctx) if extender != nil { props = extender(props) // Pro injects here } return render(component, props) } // Pro: Uses extension point func proDashboardExtender(props map[string]any) map[string]any { props["insights"] = ai.GetInsights() // Pro-only data return props }
If OSS Needs Changes
- Work in fusionaly-oss repo directly (not the submodule)
- Make changes, test:
make test && make test-e2e - Commit and push to OSS
- In Pro:
to pull changesmake update-oss
Quick Reference
| Task | Location | Command |
|---|---|---|
| Add OSS feature | fusionaly-oss | |
| Add Pro feature | fusionaly-pro/internal | |
| Extend OSS behavior | Pro via | |
| Update OSS in Pro | fusionaly-pro | |