diff --git a/.DS_Store b/.DS_Store index 550843e..436958c 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/app.vue b/app.vue index 4a1150f..e8aa8ad 100644 --- a/app.vue +++ b/app.vue @@ -91,10 +91,7 @@ const isCoopBuilderSection = computed( route.path === "/dashboard" || route.path === "/mix" || route.path === "/budget" || - route.path === "/runway-lite" || - route.path === "/scenarios" || - route.path === "/cash" || - route.path === "/session" || + route.path === "/cash-flow" || route.path === "/settings" || route.path === "/glossary" ); diff --git a/components/AnnualBudget.vue b/components/AnnualBudget.vue index dface3c..0e8c844 100644 --- a/components/AnnualBudget.vue +++ b/components/AnnualBudget.vue @@ -3,13 +3,18 @@
| Category | -Planned | ++ Category + | ++ Planned + | % | |
|---|---|---|---|---|---|
| REVENUE | |||||
| {{ category.name }} | +|||||
| + {{ category.name }} + | {{ formatCurrency(category.planned) }} | -- {{ category.percentage }}% - | +{{ category.percentage }}% | ||
| Total Revenue | +Total Revenue | {{ formatCurrency(totalRevenuePlanned) }} | @@ -47,14 +53,15 @@
{{ diversificationGuidance }} -- Consider developing: {{ suggestedCategories.join(', ') }} + + Consider developing: {{ suggestedCategories.join(", ") }}
- |
||
| - | |||||
| EXPENSES | |||||
| {{ category.name }} | +|||||
| + {{ category.name }} + | {{ formatCurrency(category.planned) }} | -- {{ category.percentage }}% - | +{{ category.percentage }}% | ||
| Total Expenses | +Total Expenses | {{ formatCurrency(totalExpensesPlanned) }} | @@ -96,8 +99,10 @@|||
| NET TOTAL | +|||||
| NET TOTAL | {{ formatCurrency(netTotal) }} | @@ -107,7 +112,6 @@||||
What are payroll oncosts?
++ Payroll oncosts cover taxes, benefits, and other employee-related expenses beyond base wages. + This typically includes employer payroll taxes, worker's compensation, benefits contributions, and other statutory requirements. +
+- Complete the Setup Wizard to see your runway projection -
-+ Weekly cash flow analysis with one-off transactions +
++ {{ alert.description }} +
++ 💡 {{ alert.suggestion }} +
+| Week | +Dates | +Inflow | +Outflow | +Net Flow | +Balance | +Transactions | +
|---|---|---|---|---|---|---|
| + Week {{ week.number }} + | ++ {{ formatDate(week.weekStart) }} - {{ formatDate(week.weekEnd) }} + | ++ {{ formatCurrency(week.inflow) }} + | ++ {{ formatCurrency(week.outflow) }} + | ++ {{ week.net >= 0 ? '+' : '' }}{{ formatCurrency(week.net) }} + | ++ {{ formatCurrency(week.balance) }} + | +
+
+
+ —
+
+ {{ event.name }} ({{ formatCurrency(event.amount) }})
+
+ |
+
- Add costs like rent, tools, insurance, or other recurring expenses. -
-- Choose between minimum needs or target pay for payroll calculations -
-+ Add costs like rent + utilities, software licenses, insurance, lawyer + fees, accountant fees, and other recurring expenses. +
Get started by adding your first overhead cost. @@ -79,48 +39,23 @@
+ + {{ currencySymbol + }}{{ Math.round((cost.annualAmount || 0) / 12) }} per month + + + {{ currencySymbol }}{{ (cost.amount || 0) * 12 }} per year + +
+- Add everyone who'll be working in the co-op, even if they're not ready - to be paid yet. -
-+ Add everyone who'll be working in the co-op. Based on your pay approach, + we'll collect the right information for each person. +
+ +Get started by adding your first team member. @@ -52,27 +32,23 @@
- Choose how to allocate payroll among members and set the base hourly rate. -
-+ This is the foundation of your co-op's finances. Choose a pay approach + and set your hourly rate. +
+ How should available money be shared among members? +
++ This hourly rate applies to all paid work in your co-op +
++ + {{ currencySymbol }}{{ Math.round((stream.targetAnnualAmount || 0) / 12) }} per month + + + {{ currencySymbol }}{{ (stream.targetMonthlyAmount || 0) * 12 }} per year + +
+- Review your setup and complete the wizard to start using your co-op - tool. -
-Optional - add costs in step 3
-- Required - add streams in step 4 -
-- {{ getScenarioDescription(scenario) }} -
-No members added yet
+Complete setup wizard to add team members
++ Increase available payroll by {{ formatCurrency(totalGap) }} + through higher revenue or lower overhead costs. +
++ You have {{ formatCurrency(totalSurplus) }} surplus after covering all member needs. + Consider growth opportunities or building reserves. +
++ Available payroll exactly matches member needs. +
+Coverage Gap Analysis
++ To meet member needs, you need {{ formatCurrency(totalNeeds) }} based on their stated requirements, + but you have {{ formatCurrency(availablePayroll) }} available for payroll. +
++ Shortfall: {{ formatCurrency(Math.max(0, totalNeeds - availablePayroll)) }} +
++ 💡 Note: This reflects member-stated needs. Check your Budget page for detailed payroll planning. +
+Healthy Coverage
++ You have {{ formatCurrency(availablePayroll) }} available to cover + {{ formatCurrency(totalNeeds) }} in member needs. +
++ Surplus: {{ formatCurrency(availablePayroll - totalNeeds) }} +
+No Funds for Payroll
++ Member needs total {{ formatCurrency(totalNeeds) }} based on their stated requirements, + but current revenue minus costs leaves $0 for payroll. +
++ Consider increasing revenue or reducing overhead costs. +
++ 💡 Note: This reflects member-stated needs. Your Budget page may show different payroll amounts. +
+Add members in setup to see coverage
++ Your budget is empty. Complete the setup wizard to add your revenue + streams, team members, and expenses. +
+| + class="border-r-1 border-black px-4 py-3 text-left font-bold min-w-[250px] sticky left-0 bg-white z-10"> Item | + class="border-r border-gray-400 px-2 py-3 text-center font-medium min-w-[80px] last:border-r-0"> {{ month.label }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| + class="px-4 py-1 font-semibold sticky left-0 bg-zinc-100 z-10 border-black" + :colspan="monthlyHeaders.length + 1"> {{ categoryName }} |
+ class="border-r-1 border-zinc-200 px-4 py-2 sticky left-0 bg-white z-10">
@@ -135,10 +135,8 @@
size="xs"
variant="ghost"
:ui="{
- base:
- 'text-red-600 hover:bg-red-100 opacity-0 group-hover:opacity-100 transition-none',
- }"
- >
+ base: 'text-red-600 hover:bg-red-100 opacity-0 group-hover:opacity-100 transition-none',
+ }">
×
@@ -146,44 +144,39 @@
+ class="border-r border-gray-200 px-1 py-1 last:border-r-0">
+ 'bg-zinc-50': !item.monthlyValues?.[month.key],
+ }" />
|
-
+ class="border-r-1 border-black px-4 py-2 sticky left-0 bg-zinc-100 z-10">
TOTAL REVENUE
|
+ class="border-r border-black px-2 py-2 text-right last:border-r-0">
{{ formatCurrency(monthlyTotals[month.key]?.revenue || 0) }}
|
- |
@@ -193,9 +186,8 @@
@click="showAddExpenseModal = true"
size="xs"
:ui="{
- base: 'bg-white text-black hover:bg-gray-200 transition-none',
- }"
- >
+ base: 'bg-white text-black hover:bg-zinc-200 transition-none',
+ }">
+ Add
@@ -206,13 +198,11 @@
+ :key="`expense-${categoryName}`">
|
+ class="px-4 py-1 font-semibold sticky left-0 bg-zinc-100 z-10"
+ :colspan="monthlyHeaders.length + 1">
{{ categoryName }}
|
+ class="border-r-1 border-zinc-200 px-4 py-2 sticky left-0 bg-white z-10">
|
-
+
+
{{ item.name }}
-
+
+
+
{{ item.subcategory }}
+ class="border-r border-gray-200 px-1 py-1 last:border-r-0">
+ :title="
+ isPayrollItem(item.id)
+ ? 'Calculated from compensation settings - edit on Compensation page'
+ : ''
+ " />
|
+ class="border-r-1 border-black px-4 py-2 sticky left-0 bg-zinc-100 z-10">
TOTAL EXPENSES
|
+ class="border-r border-gray-400 px-2 py-2 text-right last:border-r-0">
{{ formatCurrency(monthlyTotals[month.key]?.expenses || 0) }}
|
+ |
NET INCOME
|
+ :class="
+ getNetIncomeClass(monthlyTotals[month.key]?.net || 0)
+ ">
{{ formatCurrency(monthlyTotals[month.key]?.net || 0) }}
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Create a new revenue stream for your budget -
-- This will divide ${{ newRevenue.annualAmount || 0 }} equally across all 12 months - (${{ newRevenue.annualAmount ? Math.round(newRevenue.annualAmount / 12) : 0 }} per month) -
-- This will set ${{ newRevenue.monthlyAmount || 0 }} for all months + equally across all 12 months (${{ + newRevenue.annualAmount + ? Math.round(newRevenue.annualAmount / 12) + : 0 + }} + per month)
- The revenue item will be created with no initial values. You can fill them in later. + This will set + ${{ newRevenue.monthlyAmount || 0 }} + for all 12 months
+ The revenue item will be created with no initial values. You + can fill them in later directly in the budget table. +
+Create a new expense for your budget
-- This will divide ${{ newExpense.annualAmount || 0 }} equally across all 12 months - (${{ newExpense.annualAmount ? Math.round(newExpense.annualAmount / 12) : 0 }} per month) -
-- This will set ${{ newExpense.monthlyAmount || 0 }} for all months -
-- The expense item will be created with no initial values. You can fill them in later. -
-+ This will divide + ${{ newExpense.annualAmount || 0 }} + equally across all 12 months (${{ + newExpense.annualAmount + ? Math.round(newExpense.annualAmount / 12) + : 0 + }} + per month) +
++ This will set + ${{ newExpense.monthlyAmount || 0 }} + for all 12 months +
++ The expense item will be created with no initial values. You + can fill them in later directly in the budget table. +
+