from pathlib import Path
from datetime import date, timedelta
tabs = [
“Dashboard”,”365-Day Transactions”,”Daily Sales”,”Weekly Report”,”Monthly Report”,”Quarterly Report”,”Annual Report”,
“Hair Styles”,”Services”,”Retail Products”,”Braiders”,”Braider Earnings”,”Split Calculator”,”Clients”,”Payment Methods”,
“Daily Expenses”,”Weekly Expenses”,”Monthly Expenses”,”YTD Expenses”,”Expense Types”,”Inventory Dashboard”,
“Hair Inventory”,”Hair Usage”,”Hair Purchases”,”Hair Replenishment”,”Supply Inventory”,”Supply Usage”,”Supply Purchases”,
“Locations”,”Profit & Loss”,”Cash Flow”,”Sales by Style”,”Sales by Braider”,”Sales by Location”,”Sales by Payment”,
“Client KPI”,”Income KPI”,”Profitability KPI”,”Performance Scorecard”,”Targets vs Actual”,”Owner Draw”,”Payroll / Commissions”,
“Accounts Payable”,”Accounts Receivable”,”Taxes”,”Rent & Utilities”,”Repairs & Maintenance”,”Cleaning & Supplies”,
“Marketing”,”Discounts & Refunds”,”Appointments”,”Notes & Observations”,”Settings”,”Data Export / Backup”
]
styles = [“Box Braids”,”Knotless Braids”,”Micro Braids”,”Cornrows”,”Feed-In Braids”,”Goddess Braids”,”Bohemian Braids”,”Senegalese Twists”,”Passion Twists”,”Marley Twists”,”Havana Twists”,”Fulani Braids”,”Lemonade Braids”,”Crochet Braids”,”Kids Braids”,”Ponytail Braids”,”Stitch Braids”,”Tribal Braids”,”Loc Retwist”,”Custom Style”]
services = [“Wash & Blow Dry”,”Take Down”,”Hair Included”,”Deep Conditioning”,”Trim”,”Edge Styling”,”Detangling”,”Loc Maintenance”,”Custom Parting”,”Other Service”]
products = [“Braiding Hair”,”Edge Control”,”Mousse”,”Shine Spray”,”Gel”,”Shampoo”,”Conditioner”,”Scalp Oil”,”Beads/Accessories”,”Other Retail”]
braiders=[f”Braider {i}” for i in range(1,31)]
colors=[“1″,”1B”,”2″,”4″,”27″,”30″,”33″,”350″,”613″,”99J”,”T1B/27″,”T1B/30″,”T1B/613″,”T1B/BG”,”Burgundy”,”Blue”,”Red”,”Purple”,”Pink”,”Green”,”Orange”,”Silver”,”Gray”,”White”,”Ombre Brown”,”Ombre Blonde”,”Honey Blonde”,”Copper”,”Mixed Color”,”Custom”]
payments=[“Cash”,”Credit Card”,”Debit Card”,”Zelle”,”Cash App”,”PayPal”,”Venmo”,”Apple Pay”,”Google Pay”,”Check”,”Other”]
expense_types=[“Supplies”,”Hair”,”Rent”,”Utilities”,”Employee / Labor”,”Repairs”,”Snacks & Water”,”Cleaning”,”Marketing”,”Insurance”,”Taxes”,”Software”,”Bank Fees”,”Miscellaneous”]
locations=[f”Location {i}” for i in range(1,11)]
def opt(items): return “”.join(f”” for x in items)
tab_buttons=””.join(f’‘ for i,t in enumerate(tabs))
panels=[]
panels.append(“””
“””)
# 365 rows
trs=[]
start=date(2026,1,1)
for i in range(365):
d=start+timedelta(days=i)
sample=250 if i<5 else 0
trs.append(f"""
$0 $0 $0
$0 “””)
panels.append(f”””
“””)
# Daily sales 200 rows
daily=””.join(f”””$0 $0 $0 “”” for _ in range(200))
panels.append(f”””
“””)
for idx,title in [(3,”Weekly Report”),(4,”Monthly Report”),(5,”Quarterly Report”),(6,”Annual Report”)]:
panels.append(f”””
“””)
style_prices=[180,220,200,120,160,200,240,190,210,200,180,200,180,170,100,140,180,200,120,250]
panels.append(f”””
“””)
panels.append(f”””
“””)
panels.append(f”””
“””)
panels.append(f”””
“””)
panels.append(“”” “””)
panels.append(“”” “””)
clients=””.join(‘ ‘ for _ in range(200))
panels.append(f”””
“””)
panels.append(f”””
“””)
expense_rows=””.join(f’ ‘ for _ in range(300))
panels.append(f”””
“””)
for idx,title in [(16,”Weekly Expenses”),(17,”Monthly Expenses”),(18,”YTD Expenses”)]:
panels.append(f””” “””)
panels.append(f”””
“””)
panels.append(“”” “””)
hairrows=””.join(f’{i+1} 20 $80 No ‘ for i,c in enumerate(colors))
panels.append(f”””
“””)
simple_hair=””.join(f’ ‘ for _ in range(150))
panels.append(f’
‘)
panels.append(f’
‘)
panels.append(‘ ‘)
supplies=[“Edge Control”,”Braiding Gel”,”Mousse”,”Shine Spray”,”Shampoo”,”Conditioner”,”Scalp Oil”,”Rubber Bands”,”Beads”,”Clips”,”Combs”,”Brushes”,”Gloves”,”Neck Strips”,”Towels”,”Disinfectant”,”Paper Towels”,”Trash Bags”,”Foil”,”Misc. Supply”]
suprows=””.join(f’{i+1} 10 $50 No ‘ for i,s in enumerate(supplies))
panels.append(f’
‘)
simple_sup=””.join(f’ ‘ for _ in range(150))
panels.append(f’
‘)
panels.append(f’
‘)
panels.append(f’
‘)
panels.append(“””
“””)
panels.append(“”” “””)
for idx,title in [(31,”Sales by Style”),(32,”Sales by Braider”),(33,”Sales by Location”),(34,”Sales by Payment”)]:
panels.append(f’ ‘)
for idx,title in [(35,”Client KPI”),(36,”Income KPI”),(37,”Profitability KPI”),(38,”Performance Scorecard”),(39,”Targets vs Actual”)]:
panels.append(f’
‘)
generic={40:”Owner Draw”,41:”Payroll / Commissions”,42:”Accounts Payable”,43:”Accounts Receivable”,44:”Taxes”,45:”Rent & Utilities”,46:”Repairs & Maintenance”,47:”Cleaning & Supplies”,48:”Marketing”,49:”Discounts & Refunds”,50:”Appointments”,51:”Notes & Observations”,52:”Settings”,53:”Data Export / Backup”}
for idx,title in generic.items():
if idx==53:
body=’‘
else:
rows=””.join(‘ ‘ for _ in range(75))
body=f’
‘
panels.append(f’ ‘)
html=f”””
Braiding Salon Accounting 360
“””
out=Path(“/mnt/data/braiding_salon_accounting_360_multitab.html”)
out.write_text(html,encoding=”utf-8″)
print(f”Created: {out}”)
print(f”Tabs: {len(tabs)}”)
print(f”Size: {out.stat().st_size:,} bytes”)
Salon Dashboard
Today Sales$0
Today Clients0
Salon 40%$0
Braiders 60%$0
Today Expenses$0
Today Net Income$0
YTD Sales$0
YTD Net Income$0
Client KPI
0
0%
Income KPI
$0
0%
Profitability KPI
0%
Not calculated
365-Day Transaction Log
| Date | Client | Location | Style | Service | Service Amount | Payment | Braider 1 | Braider 2 | Braider 3 | Braider 4 | Braider Pool 60% | Salon 40% | Each Braider | Product Sales | Discount | Refund | Net Sale | Notes |
|---|
Daily Sales Detail
| Date | Client | Location | Style | Amount | Payment | Braider 1 | Braider 2 | Braider 3 | Braider 4 | Salon 40% | Braiders 60% | Each Braider | Notes |
|---|
{title}
Sales$0
Clients0
Salon Share$0
Braider Share$0
Expenses$0
Net Income$0
Hair Styles – 20
| # | Style | Base Price | Hours | Hair Packs | Notes |
|---|---|---|---|---|---|
| {i+1} |
Services – 10
| # | Service | Price | Notes |
|---|---|---|---|
| {i+1} |
Retail Products – 10
| # | Product | Cost | Selling Price | Notes |
|---|---|---|---|---|
| {i+1} |
Braiders – 30
| # | Name | Phone | Status | Braider % | Sales | Earnings | |
|---|---|---|---|---|---|---|---|
| {i+1} | $0 | $0 |
Braider Earnings
Service Revenue$0
Braider Pool$0
Salon Share$0
Braider Split Calculator
Salon$0
Braider Pool$0
Each Braider$0
Clients
| Name | Phone | Preferred Style | Last Visit | Lifetime Spend | Notes |
|---|
Payment Methods
| Payment Method | Total | % of Sales | Notes |
|---|---|---|---|
| {p} | $0 | 0% |
Daily Expenses
| Date | Type | Vendor | Amount | Payment | Location | Notes |
|---|
{title}
Total$0
Hair & Supplies$0
Rent & Utilities$0
Other$0
Expense Types
| Type | YTD Amount | % | Notes |
|---|---|---|---|
| {e} | $0 | 0% |
Inventory Dashboard
Hair Inventory$0
Supply Inventory$0
Reorder Items0
Total Inventory$0
Hair Inventory – 30 Synthetic Colors
| # | Type | Color | Opening | Purchased | Used | On Hand | Reorder Point | Unit Cost | Value | Replenish? |
|---|
Hair Usage
| Date | Color | Quantity | Client / Notes |
|---|
Hair Purchases
| Date | Color | Quantity | Vendor / Notes |
|---|
Hair Replenishment
No items flagged.
Supply Inventory
| # | Supply | Opening | Purchased | Used | On Hand | Reorder Point | Unit Cost | Value | Replenish? |
|---|
Supply Usage
| Date | Supply | Quantity | Notes |
|---|
Supply Purchases
| Date | Supply | Quantity | Vendor / Notes |
|---|
Locations – Up to 10
| # | Location | Address | Manager | Phone | Sales | Profit |
|---|---|---|---|---|---|---|
| {i+1} | $0 | $0 |
Salon Profit & Loss
| Item | Amount | % of Sales |
|---|---|---|
| Total Sales | $0 | 100% |
| Braider Commissions | $0 | 0% |
| Salon Gross Share | $0 | 0% |
| Operating Expenses | $0 | 0% |
| Net Income / Loss | $0 | 0% |
Cash Flow
Cash In$0
Cash Out$0
Net Cash Flow$0
{title}
{title}
| KPI | Target | Actual | Achievement | Status |
|---|---|---|---|---|
| Clients / Day | 12 | 0 | 0% | |
| Daily Sales | $2,500 | $0 | 0% | |
| Net Margin | 20% | 0% | 0% |
Data is stored in this browser unless exported.
| Date | Description | Amount | Notes |
|---|
{title}
{body}Braiding Salon Accounting 360
Today Sales$0
Today Clients0
Salon 40%$0
Braiders 60%$0
Today Expenses$0
Today Net$0
YTD Sales$0
YTD Net$0
{tab_buttons}
{”.join(panels)}