Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions .doc/demo-slide-deck.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# Smart GL - Demo Overview for Business Sponsor

## 1. Welcome to Your New Financial Command Centre

**What you're looking at:** Your complete financial picture - all in one place.

- Dashboard shows money in, money out, and profit at a glance
- No more switching between bank apps and spreadsheets
- Everything update automatically from your connected bank
- Safe and secure - Australian financial data standards

---

## 2. See Every Transaction - Automatically

**What you're looking at:** Every payment as it happens.

- Bank feeds connect directly to 135+ Australian banks
- Transactions appear within minutes of hitting your account
- Smart categorisation sorts payments automatically (wages, materials, etc.)
- Easy search - find any transaction in seconds
- Demo shows sample data from "Coastal Trades" business

---

## 3. Chat with Your CFO - Ask Anything

**What you're looking at:** Your AI financial assistant.

- Ask "How did we do this month?" → instant answer
- Ask "What's our cash runway?" → clear response
- Ask "Show me anomalies" → highlights problems to review
- No accounting training needed - plain English only
- Works like having a financial expert on call 24/7

---

## 4. Spot Problems Before They Grow

**What you're looking at:** Alerts for unusual activity.

- Duplicate payments - catches when the same bill gets paid twice
- Unusual vendor payments - flags first-time suppliers
- Missing receipts - reminds you when documentation is needed
- All issues ranked by how urgent they are (high/medium/low)
- Click to dismiss or mark as resolved

---

## 5. Cash Flow Forecast - Never Run Dry

**What you're looking at:** Your money future.

- See cash position today and weeks ahead
- Warning flags when BAS or tax payments are coming
- Runway calculation - how many months until you need more cash
- Plan ahead with confidence
- Demo data shows realistic example

---

## 6. Monthly Briefing - Done For You

**What you're looking at:** Month-end summary, instant.

- Revenue, expenses, profit - all calculated
- What changed vs last month (up/down percentages)
- Positive wins to celebrate
- Items needing your attention
- Ready to send to your accountant or advisor

---

## 7. Connect Your Bank in Minutes

**What you're looking at:** Adding a new bank account.

- Click "Add Bank Account" button
- Select from 135+ Australian banks
- Enter account details (BSB + account number)
- Done - starts syncing immediately
- Demo shows how the form works

---

## 8. Export Reports for Your Advisor

**What you're looking at:** One-click report export.

- Profit & Loss (P&L) - what you made or lost
- Balance Sheet - what you own vs owe
- GST/BAS - tax ready figures
- Trial Balance - account-level detail
- Click "Export PDF" → clean professional document

---

## 9. Industry Comparison - How Do You Stack Up?

**What you're looking at:** Your performance vs similar businesses.

- See where you are vs industry benchmarks
- Gross margin percentile - are you above or below average?
- Net profit comparison
- Operating cost comparison
- Demo compares to "Professional Services" industry

---

## 10. Key Takeaways for You

1. **Save time** - automatic transaction import
2. **See more** - complete financial picture
3. **Get alerts** - problems caught early
4. **Plan ahead** - cash flow forecast
5. **Share easily** - export PDF reports

**Ready to try?** Visit the demo at smart-GL and click around.

---

## Demo Login Quick Guide

| Feature | Where | What to Click |
|---------|-------|------------|
| See transactions | Transactions | Sort by category |
| CFO chat | CFO Dashboard | Ask a question |
| Cash flow | CFO Dashboard | Look at forecast card |
| Add bank | Bank Feeds | Add Bank Account |
| Export report | Reports | Export PDF |
| View anomalies | CFO Dashboard | Anomalies card |
6 changes: 5 additions & 1 deletion apps/web/app/bank-feeds/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { RefreshCw, Plus, CheckCircle2, AlertCircle, Clock } from "lucide-react"
import { Button } from "@/components/ui/button";
import { useToast } from "@/hooks/use-toast";
import { DemoAccountsPanel } from "@/components/DemoAccountsPanel";
import { AddBankModal } from "@/components/AddBankModal";

const CONNECTIONS = [
{ id: "c1", bank: "ANZ", name: "Business Everyday", number: "****4521", balance: "$82,345.20", lastSync: "Today 09:14", status: "active", txnCount: 143 },
Expand All @@ -13,6 +14,7 @@ const CONNECTIONS = [
export default function BankFeedsPage() {
const [syncing, setSyncing] = useState(false);
const [demoAccounts, setDemoAccounts] = useState<DemoAccount[]>([]);
const [showAddModal, setShowAddModal] = useState(false);
const { toast } = useToast();

interface DemoAccount {
Expand Down Expand Up @@ -63,7 +65,7 @@ export default function BankFeedsPage() {
<RefreshCw size={14} className={`mr-1.5 ${syncing ? "animate-spin" : ""}`} />
Sync All
</Button>
<Button size="sm">
<Button size="sm" onClick={() => setShowAddModal(true)}>
<Plus size={14} className="mr-1.5" />
Add Bank Account
</Button>
Expand Down Expand Up @@ -142,6 +144,8 @@ export default function BankFeedsPage() {
<p>Transactions are fetched 30 days back on each sync to capture delayed postings. Deduplication is guaranteed by Basiq transaction ID.</p>
</div>
</div>

<AddBankModal isOpen={showAddModal} onClose={() => setShowAddModal(false)} />
</div>
);
}
27 changes: 18 additions & 9 deletions apps/web/app/cfo/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,16 @@ export default function CfoDashboardPage() {

useEffect(() => {
Promise.all([
fetch("/api/cfo/anomalies").then(r => r.json()).catch(() => []),
fetch("/api/cfo/briefing").then(r => r.json()).catch(() => []),
fetch("/api/cfo/anomalies").then(r => r.json()).then(d => d.anomalies || []).catch(() => []),
fetch("/api/cfo/briefing").then(r => r.json()).then(d => Array.isArray(d) ? d : [d]).catch(() => []),
fetch("/api/cfo/cash-flow").then(r => r.json()).catch(() => ({})),
]).then(([a, b, c]) => {
setAnomalies(a.anomalies || a || []);
setBriefings(b.briefings || b || []);
setCashFlow(c.forecast || c || []);
setAnomalies(a || []);
setBriefings(b || []);
const cf = c?.current ? [
{ period: c.current.month_year, inflow: c.current.inflows_cents/100, outflow: c.current.outflows_cents/100, net: (c.current.closing_cents - c.current.opening_cents)/100 }
] : [];
setCashFlow(cf);
}).catch(console.error)
.finally(() => setLoading(false));
}, []);
Expand Down Expand Up @@ -117,14 +120,20 @@ export default function CfoDashboardPage() {
<div className="text-muted-foreground">Loading...</div>
) : anomalies.length > 0 ? (
<div className="space-y-3">
{anomalies.slice(0, 5).map((a) => (
{anomalies.slice(0, 5).map((a: any) => (
<div key={a.id} className="p-3 bg-amber-50 rounded-lg">
<div className="text-sm font-medium">{a.type}</div>
<div className="text-sm font-medium">{a.title}</div>
<div className="text-xs text-muted-foreground mt-1">
{a.description}
</div>
<div className="text-xs font-medium mt-2">
${a.amount.toLocaleString()}
<div className="text-xs font-medium mt-2 flex items-center gap-2">
<span className={`px-2 py-0.5 rounded ${
a.severity === "high" ? "bg-red-100 text-red-700" :
a.severity === "medium" ? "bg-orange-100 text-orange-700" :
"bg-gray-100 text-gray-600"
}`}>
{a.severity}
</span>
</div>
</div>
))}
Expand Down
31 changes: 30 additions & 1 deletion apps/web/app/reports/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,43 @@ export default function ReportsPage() {
const totalExpenses = PL_DATA.expenses.reduce((s, r) => s + r.amount, 0);
const netProfit = grossProfit - totalExpenses;

const handleExportPDF = () => {
const content = document.getElementById("report-content");
if (!content) return;
const printWindow = window.open("", "_blank");
if (!printWindow) return;
printWindow.document.write(`
<html>
<head>
<title>Coastal Trades - Financial Report</title>
<style>
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 40px; }
h1 { font-size: 24px; margin-bottom: 4px; }
.subtitle { color: #666; font-size: 14px; margin-bottom: 24px; }
table { width: 100%; border-collapse: collapse; margin-bottom: 16px; }
th, td { padding: 8px 12px; text-align: left; border-bottom: 1px solid #eee; }
th { background: #f9f9f9; font-weight: 600; font-size: 12px; text-transform: uppercase; }
.total-row { font-weight: bold; background: #f0f9ff; }
.profit { color: #16a34a; }
.loss { color: #dc2626; }
@media print { body { padding: 20px; } }
</style>
</head>
<body>${content.innerHTML}</body>
</html>
`);
printWindow.document.close();
printWindow.print();
};

return (
<div className="space-y-5">
<div className="flex items-center justify-between">
<div>
<h1 className="text-2xl font-bold text-gray-900">Reports</h1>
<p className="text-sm text-gray-500 mt-0.5">Coastal Trades Pty Ltd · FY 2024–25</p>
</div>
<Button variant="outline" size="sm">
<Button variant="outline" size="sm" onClick={handleExportPDF}>
<Download size={14} className="mr-1.5" />
Export PDF
<DemoBadge />
Expand Down
Loading
Loading