mirror of
https://github.com/Since-3/since3-website.git
synced 2026-10-12 20:51:17 +00:00
124 lines
4.2 KiB
TypeScript
124 lines
4.2 KiB
TypeScript
// Single source of truth for the price calculator.
|
|
//
|
|
// TODO: replace the EXAMPLE values below with your real prices, then set
|
|
// `isExample` to false. While it is true, the calculator shows a visible
|
|
// "Beispielpreise" badge so placeholder prices can never go live unnoticed.
|
|
|
|
export type VatMode =
|
|
// B2B: net prices plus VAT
|
|
| "net"
|
|
// B2C: prices incl. 19 % VAT (required by the PAngV when addressing consumers)
|
|
| "gross"
|
|
// Kleinunternehmer according to §19 UStG
|
|
| "small-business"
|
|
|
|
export type ProjectTypeId = "landing" | "website" | "shop" | "software" | "automation"
|
|
|
|
export type ProjectType = {
|
|
id: ProjectTypeId
|
|
label: string
|
|
description: string
|
|
base: number
|
|
// Delivery time in weeks at "small"/included scope
|
|
weeks: [number, number]
|
|
// Website-like projects are sized by page count
|
|
pages?: { included: number; max: number; pricePerPage: number }
|
|
// Software-like projects are sized by complexity instead
|
|
sizedByComplexity?: boolean
|
|
}
|
|
|
|
export type Extra = {
|
|
id: string
|
|
label: string
|
|
price: number
|
|
// Project types this extra is offered for
|
|
for: ProjectTypeId[]
|
|
}
|
|
|
|
export type MonthlyService = {
|
|
id: string
|
|
label: string
|
|
description: string
|
|
price: number
|
|
}
|
|
|
|
export const pricing = {
|
|
isExample: true,
|
|
vat: "net" as VatMode,
|
|
vatRate: 0.19,
|
|
|
|
// The estimate is shown as a range around the calculated value
|
|
spread: { low: 0.9, high: 1.2 },
|
|
roundTo: 100,
|
|
|
|
projectTypes: [
|
|
{
|
|
id: "landing",
|
|
label: "Landingpage",
|
|
description: "Eine starke Seite für ein Angebot oder eine Kampagne.",
|
|
base: 1500,
|
|
weeks: [2, 3],
|
|
},
|
|
{
|
|
id: "website",
|
|
label: "Website",
|
|
description: "Unternehmensauftritt mit mehreren Seiten.",
|
|
base: 3500,
|
|
weeks: [4, 6],
|
|
pages: { included: 5, max: 30, pricePerPage: 250 },
|
|
},
|
|
{
|
|
id: "shop",
|
|
label: "Online-Shop",
|
|
description: "Verkaufen mit Warenkorb, Zahlung und Versand.",
|
|
base: 6500,
|
|
weeks: [6, 10],
|
|
pages: { included: 5, max: 30, pricePerPage: 250 },
|
|
},
|
|
{
|
|
id: "software",
|
|
label: "Web-App",
|
|
description: "Individuelle Software, Portale, interne Tools.",
|
|
base: 8000,
|
|
weeks: [6, 10],
|
|
sizedByComplexity: true,
|
|
},
|
|
{
|
|
id: "automation",
|
|
label: "KI-Automatisierung",
|
|
description: "Abläufe automatisieren, KI sinnvoll einbinden.",
|
|
base: 2500,
|
|
weeks: [2, 4],
|
|
sizedByComplexity: true,
|
|
},
|
|
] satisfies ProjectType[],
|
|
|
|
complexity: [
|
|
{ id: "small", label: "Überschaubar", hint: "Ein klarer Ablauf, wenige Rollen", factor: 1 },
|
|
{ id: "medium", label: "Mittel", hint: "Mehrere Abläufe, Nutzerkonten", factor: 1.8 },
|
|
{ id: "large", label: "Umfangreich", hint: "Viele Schnittstellen und Rollen", factor: 3 },
|
|
],
|
|
|
|
extras: [
|
|
{ id: "cms", label: "Inhalte selbst pflegen (CMS)", price: 900, for: ["landing", "website"] },
|
|
{ id: "language", label: "Zweite Sprache", price: 900, for: ["landing", "website", "shop", "software"] },
|
|
{ id: "copy", label: "Texte schreiben wir", price: 600, for: ["landing", "website", "shop"] },
|
|
{ id: "branding", label: "Logo & Markenauftritt", price: 1200, for: ["landing", "website", "shop", "software"] },
|
|
{ id: "booking", label: "Terminbuchung", price: 800, for: ["landing", "website"] },
|
|
{ id: "seo", label: "SEO-Grundpaket", price: 600, for: ["landing", "website", "shop"] },
|
|
{ id: "integrations", label: "Anbindung an bestehende Systeme", price: 1500, for: ["shop", "software", "automation"] },
|
|
{ id: "ai", label: "KI-Assistent / Chatbot", price: 1800, for: ["website", "shop", "software", "automation"] },
|
|
] satisfies Extra[],
|
|
|
|
monthly: [
|
|
{ id: "care", label: "Hosting & Wartung", description: "Updates, Backups, Sicherheit", price: 49 },
|
|
{ id: "seo-care", label: "SEO-Betreuung", description: "Monatliche Optimierung und Reporting", price: 290 },
|
|
] satisfies MonthlyService[],
|
|
|
|
express: { label: "Express", hint: "Etwa 40 % schneller fertig", factor: 1.25, weeksFactor: 0.6 },
|
|
|
|
// Always part of the price, shown as reassurance
|
|
included: ["Barrierefrei nach BFSG", "Responsive Design", "Schnelle Ladezeiten", "DSGVO-konform"],
|
|
}
|
|
|
|
export type ComplexityId = (typeof pricing.complexity)[number]["id"]
|