/** * ┌──────────────────────────────────────────────────────────────────┐ * │ EXAMPLE / PLACEHOLDER DASHBOARD WIDGETS — SAFE TO DELETE │ * └──────────────────────────────────────────────────────────────────┘ * * Everything in this file is demo content to show what a Bloby workspace * can look like. NONE of it is connected to real data. * * To start fresh with the user's real widgets: * 1. Delete this entire file (deleteme_placeholders.tsx). * 2. In DashboardPage.tsx, remove the `PlaceholderWidgets` import and the * usage. * The dashboard will then be empty — ready for real apps/widgets. * * It is intentionally fully self-contained (own data, icons, styles, and the * dismissible "these are examples" banner) so removal is a one-file delete. */ import { useState } from 'react'; import { Search, TrendingUp, Sparkles, X as XIcon } from 'lucide-react'; import { AreaChart, Area, BarChart, Bar, ResponsiveContainer } from 'recharts'; const DISMISS_KEY = 'bloby_example_widgets_dismissed'; const CARD = 'relative rounded-xl overflow-hidden'; const BORDER = 'absolute inset-0 rounded-xl bg-gradient-to-b from-white/[0.08] via-white/[0.02] to-transparent pointer-events-none'; const INNER = 'relative rounded-xl bg-[#141414] m-px p-3.5 h-full'; const rev = [{ v: 82 }, { v: 89 }, { v: 94 }, { v: 101 }, { v: 108 }, { v: 112 }, { v: 125 }]; const fol = [{ v: 12 }, { v: 18 }, { v: 9 }, { v: 24 }, { v: 31 }, { v: 19 }, { v: 27 }]; function StripeSvg() { return ; } function GmailSvg() { return ; } function XSvg() { return ; } /** Small "Example" tag shown on each placeholder card. */ function ExampleBadge() { return ( Example ); } export function PlaceholderWidgets() { const [dismissed, setDismissed] = useState(() => { try { return localStorage.getItem(DISMISS_KEY) === '1'; } catch { return false; } }); function dismissBanner() { setDismissed(true); try { localStorage.setItem(DISMISS_KEY, '1'); } catch {} } return ( <> {/* "These are examples" banner — dismissible, remembers via localStorage */} {!dismissed && (

These are example widgets

Just a preview of what your workspace can look like — none of it is real data. Ask Bloby to replace them with your own apps.

)}
{/* Stripe — 2 cols */}
Stripe
+12.5%

$12,480

MRR

{/* X — 1 col */}
X

24.8K

+1.4K
{/* Gmail — 1 col */}
Gmail 3 new
{['Sarah Chen', 'Stripe', 'Alex R.'].map((n) => (
{n[0]}
{n}
))}
{/* Research — 2 cols */}
Research 3
{[ { t: 'Competitor pricing', s: 'Done', c: 'text-emerald-500 bg-emerald-500/10' }, { t: 'Market trends Q1', s: 'Done', c: 'text-emerald-500 bg-emerald-500/10' }, { t: 'User feedback', s: 'Review', c: 'text-orange-400 bg-orange-400/10' }, ].map((r) => (
{r.t} {r.s}
))}
); }