Skip to content
codexa

SaaS · React

Team chat app

Friendly site for a calm team chat app with a channel mock, features, pricing, quotes and an FAQ.

Team chat app starter, as built from its own files
Starter screenshot captured from this template's own build at 1440×900. It shows the template as it ships, not output generated from a prompt.

What you get

A product site for a team messaging app built around threads and quiet hours: a channel list mock, features, a focus-time split, three steps, monthly per-seat pricing, quotes and an FAQ. All content lives in src/site.ts.

Files

Exactly what is copied into a new project: 13 files, nothing generated.

Raw data: GET /api/v1/templates/saas-team-chat

src/site.ts
src/site.ts
import type { Site } from "./types"; /** Everything this site shows. Edit freely. */export const site: Site = {  "brand": "Porchlight",  "nav": [    {      "label": "Features",      "href": "#features"    },    {      "label": "Quiet hours",      "href": "#focus"    },    {      "label": "Pricing",      "href": "#pricing"    },    {      "label": "FAQ",      "href": "#faq"    }  ],  "navCta": {    "label": "Start a workspace",    "href": "#start"  },  "sections": [    {      "kind": "hero",      "variant": "center",      "eyebrow": "Team chat, at a calmer pace",      "title": "A team chat that respects the end of the day.",      "text": "Threads by default, a daily digest instead of a hundred pings, and quiet hours that everyone can see. Talk when it matters, catch up when it suits you.",      "primary": {        "label": "Start a free workspace",        "href": "#start"      },      "secondary": {        "label": "How quiet hours work",        "href": "#focus"      },      "visual": {        "type": "mock",        "title": "Riverbend Design · Channels",        "rows": [          {            "label": "# general",            "value": "2 new threads",            "tone": "#c2410c"          },          {            "label": "# client-harlow-rebrand",            "value": "Decision needed",            "tone": "#b45309"          },          {            "label": "# product-launch-june",            "value": "5 unread",            "tone": "#c2410c"          },          {            "label": "@ Nadia Osei",            "value": "Quiet until 9:00",            "tone": "#a8a29e"          },          {            "label": "# random",            "value": "Up to date",            "tone": "#047857"          }        ],        "footer": "Your digest is ready: 3 threads mention you"      }    },    {      "kind": "features",      "id": "features",      "eyebrow": "Features",      "title": "Built for teams that write things down",      "columns": 3,      "items": [        {          "title": "Threads first",          "text": "Every message starts a thread, so a channel reads like a list of topics, not a river.",          "icon": "book"        },        {          "title": "Decisions",          "text": "Mark a reply as the decision. It's pinned to the thread and searchable later.",          "icon": "check"        },        {          "title": "Daily digest",          "text": "One summary each morning of the threads you follow, in the order they need you.",          "icon": "mail"        },        {          "title": "Voice huddles",          "text": "Drop into a quick call from any thread. Notes stay attached afterwards.",          "icon": "phone"        },        {          "title": "Guests",          "text": "Invite clients to a single channel without giving them the whole workspace.",          "icon": "users"        },        {          "title": "Search that finds things",          "text": "Filter by person, channel, file type or decision. Results show the whole thread.",          "icon": "globe"        }      ]    },    {      "kind": "split",      "id": "focus",      "eyebrow": "Quiet hours",      "title": "Everyone's working hours, visible to everyone",      "text": "Set your hours once. Messages sent while you're offline wait for the morning, and senders can see why you haven't answered yet.",      "bullets": [        "Urgent override that has to be justified",        "Hours shown next to every name",        "Weekend mode for the whole team"      ],      "visual": {        "type": "card",        "tone": "#7c2d12",        "title": "Nadia is offline",        "lines": [          "Back at 9:00 Lisbon time",          "Your message will wait",          "Mark as urgent only if it can't"        ]      }    },    {      "kind": "steps",      "eyebrow": "Getting started",      "title": "Moving over is quick",      "items": [        {          "title": "Create a workspace",          "text": "Name it, pick your channels, set default quiet hours."        },        {          "title": "Import your history",          "text": "Bring channels and files across from a standard chat export file."        },        {          "title": "Invite the team",          "text": "Send a link or add everyone at once with your email domain."        }      ]    },    {      "kind": "pricing",      "id": "pricing",      "eyebrow": "Pricing",      "title": "Per person, per month",      "text": "Guests are free on every plan.",      "plans": [        {          "name": "Free",          "price": "$0",          "period": "/month",          "text": "For small teams getting started.",          "features": [            "Up to 10 members",            "90 days of history",            "1:1 huddles"          ],          "cta": {            "label": "Start free",            "href": "#start"          }        },        {          "name": "Team",          "price": "$6",          "period": "/user/month",          "text": "For teams that live in chat.",          "features": [            "Unlimited history",            "Decisions and digests",            "Group huddles",            "Guest channels"          ],          "featured": true,          "cta": {            "label": "Try Team for 30 days",            "href": "#start"          }        },        {          "name": "Organisation",          "price": "$11",          "period": "/user/month",          "text": "For several teams and admins.",          "features": [            "Everything in Team",            "Single sign-on",            "Retention policies",            "Data export for admins"          ],          "cta": {            "label": "Talk to us",            "href": "#start"          }        }      ]    },    {      "kind": "quotes",      "eyebrow": "Teams on Porchlight",      "title": "What changed for them",      "items": [        {          "quote": "I stopped checking chat at dinner. The digest tells me what I missed in two minutes.",          "name": "Ana F.",          "role": "Studio director"        },        {          "quote": "Decisions are the feature. We stopped re-arguing things from three weeks ago.",          "name": "Kwame A.",          "role": "Product lead"        },        {          "quote": "Half our team is in Lisbon, half in Toronto. Quiet hours made that workable.",          "name": "Elise R.",          "role": "Operations manager"        }      ]    },    {      "kind": "faq",      "id": "faq",      "eyebrow": "FAQ",      "title": "Good to know",      "items": [        {          "q": "Can we import from another chat app?",          "a": "Yes, from any tool that exports standard JSON or CSV. Channels, messages and files come across."        },        {          "q": "Are there mobile apps?",          "a": "Yes, for iOS and Android, with the same quiet hours and digest."        },        {          "q": "Who can see private channels?",          "a": "Only their members. Workspace admins can't read them unless your plan's retention policy says so and members are told."        }      ]    },    {      "kind": "cta",      "id": "start",      "title": "Give your team a quieter place to talk",      "text": "Free for up to ten people, no time limit.",      "primary": {        "label": "Create a workspace",        "href": "#pricing"      },      "secondary": {        "label": "Read the FAQ",        "href": "#faq"      }    }  ],  "footer": {    "text": "Calm team chat with threads, decisions and quiet hours.",    "columns": [      {        "title": "Product",        "links": [          "Features",          "Pricing",          "Mobile apps"        ]      },      {        "title": "Company",        "links": [          "About",          "Careers",          "Contact"        ]      }    ],    "legal": "© Porchlight. Sample content: replace it in src/site.ts."  }};

Remix

Remix this template

Describe what to change and the agent starts from Team chat app's files. The box is already started for you: finish “Start from Team chat app and …”

Agent ready

Creates a free account first; your idea is carried over.

Dependencies

Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.

  • react^19.1.0
  • react-dom^19.1.0
  • vite^6.3.0
  • @vitejs/plugin-react^4.4.0
  • tailwindcss^4.1.0
  • @tailwindcss/vite^4.1.0
  • typescript^5.8.0

How it runs

Framework
Vite + React + TypeScript
Dev command
npm run dev
Build command
npm run build
Output directory
dist
Port
5173
Entry route
/

Projects run in an isolated sandbox with a live preview. Read the projects documentation for settings, snapshots and deployment.

All templates
  • Error monitoring

    Dark developer-focused site for an error tracking tool with a live issues mock, SDK steps and pricing.

    React · 13 files · Beginner

  • Product analytics

    Crisp site for a product analytics tool with a funnel mock, retention features, event pricing and FAQ.

    React · 13 files · Beginner

  • Featured

    SaaS starter

    Marketing pages, sign-in and sign-up screens, and an authenticated app area with a mocked session you replace with real auth.

    React · 18 files · Intermediate

Build on Team chat app

Create a free account, start from this template, and ask the AI agent to turn it into your app.