1import{az as e,j as l}from"./index-Bq4cyBqC.js";import{D as r}from"./DocLayout-D6Ygh-yS.js";const a=function(t){return Object.keys(t).forEach(function(n){t[n]}),e.createElement("div",null,e.createElement("h1",null,"Project Stats"),e.createElement("p",null,e.createElement("strong",null,"Howler by the numbers.")),e.createElement("hr",null),e.createElement("h2",null,"Overview"),e.createElement("table",null,e.createElement("thead",null,e.createElement("tr",null,e.createElement("th",null,"Metric"),e.createElement("th",null,"Value"))),e.createElement("tbody",null,e.createElement("tr",null,e.createElement("td",null,"First Commit"),e.createElement("td",null,"December 30, 2024")),e.createElement("tr",null,e.createElement("td",null,"Total Commits"),e.createElement("td",null,"781")),e.createElement("tr",null,e.createElement("td",null,"Development Time"),e.createElement("td",null,"~22 days")),e.createElement("tr",null,e.createElement("td",null,"Lines of Code"),e.createElement("td",null,"71,558")),e.createElement("tr",null,e.createElement("td",null,"Test Cases"),e.createElement("td",null,"775")),e.createElement("tr",null,e.createElement("td",null,"Tokens Used (30 days)"),e.createElement("td",null,"8.7M")),e.createElement("tr",null,e.createElement("td",null,"API Cost Equivalent"),e.createElement("td",null,"~$490")),e.createElement("tr",null,e.createElement("td",null,"Sessions"),e.createElement("td",null,"182")),e.createElement("tr",null,e.createElement("td",null,"Active Days"),e.createElement("td",null,"25/30")))),e.createElement("hr",null),e.createElement("h2",null,"What's Built"),e.createElement("ul",null,e.createElement("li",null,e.createElement("strong",null,"End-to-end encryption")," using Signal Protocol"),e.createElement("li",null,e.createElement("strong",null,"Voice messaging")," with audio recording, encryption, and playback"),e.createElement("li",null,e.createElement("strong",null,"Transcription")," via Whisper (client-side and cloud)"),e.createElement("li",null,e.createElement("strong",null,"Groups")," with multi-member encryption"),e.createElement("li",null,e.createElement("strong",null,"Howlcasts")," for collaborative voice content"),e.createElement("li",null,e.createElement("strong",null,"Claubsidian")," for Obsidian vault search"),e.createElement("li",null,e.createElement("strong",null,"Claude bot")," for voice-to-code development")),e.createElement("hr",null),e.createElement("h2",null,"Technology Stack"),e.createElement("table",null,e.createElement("thead",null,e.createElement("tr",null,e.createElement("th",
1null,"Layer"),e.createElement("th",null,"Technology"))),e.createElement("tbody",null,e.createElement("tr",null,e.createElement("td",null,"Frontend"),e.createElement("td",null,"React, TypeScript, Vite")),e.createElement("tr",null,e.createElement("td",null,"UI"),e.createElement("td",null,"Tailwind CSS, shadcn/ui")),e.createElement("tr",null,e.createElement("td",null,"Auth"),e.createElement("td",null,"Supabase Auth")),e.createElement("tr",null,e.createElement("td",null,"Database"),e.createElement("td",null,"PostgreSQL (Supabase)")),e.createElement("tr",null,e.createElement("td",null,"Storage"),e.createElement("td",null,"Cloudflare R2")),e.createElement("tr",null,e.createElement("td",null,"Encryption"),e.createElement("td",null,"Signal Protocol")),e.createElement("tr",null,e.createElement("td",null,"Transcription"),e.createElement("td",null,"Whisper WASM + OpenAI API")),e.createElement("tr",null,e.createElement("td",null,"Edge Functions"),e.createElement("td",null,"Supabase Edge (Deno)")))),e.createElement("hr",null),e.createElement("h2",null,"AI-Assisted Development"),e.createElement("p",null,"This project was built primarily through AI pair programming with Claude."),e.createElement("h3",null,"What Worked"),e.createElement("ul",null,e.createElement("li",null,"Detailed specs lead to accurate implementation"),e.createElement("li",null,"Session logs enable seamless context switching"),e.createElement("li",null,"AI follows security patterns when explicitly prompted")),e.createElement("h3",null,"What Needed Human Review"),e.createElement("ul",null,e.createElement("li",null,"Security edge cases"),e.createElement("li",null,"Logging sensitivity"),e.createElement("li",null,"Error handling that could leak data")),e.createElement("hr",null),e.createElement("h2",null,"Traditional Time Estimate"),e.createElement("table",null,e.createElement("thead",null,e.createElement("tr",null,e.createElement("th",
1null,"System"),e.createElement("th",null,"Traditional Estimate"))),e.createElement("tbody",null,e.createElement("tr",null,e.createElement("td",null,"Signal Protocol E2E Encryption"),e.createElement("td",null,"3-4 weeks")),e.createElement("tr",null,e.createElement("td",null,"Audio Pipeline"),e.createElement("td",null,"2-3 weeks")),e.createElement("tr",null,e.createElement("td",null,"Transcription"),e.createElement("td",null,"1-2 weeks")),e.createElement("tr",null,e.createElement("td",null,"Groups"),e.createElement("td",null,"2-3 weeks")),e.createElement("tr",null,e.createElement("td",null,"Core App"),e.createElement("td",null,"3-4 weeks")),e.createElement("tr",null,e.createElement("td",null,e.createElement("strong",null,"Total (solo dev)")),e.createElement("td",null,e.createElement("strong",null,"12-16 weeks"))))),e.createElement("p",null,e.createElement("strong",null,"Actual time: ~22 days")," (5-7x faster)"),e.createElement("hr",null),e.createElement("p",null,e.createElement("em",null,"Built by Angadh Nanjangud with Claude's assistance.")),e.createElement("p",null,e.createElement("em",null,"Source: ",e.createElement("a",{href:"https://github.com/angadhn/Howler"},"GitHub"))))};function E(){return l.jsx(r,{children:l.jsx(a,{})})}export{E as StatsPage};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.