feat: estimates on the homepage, monthly booking on the freelance page

The homepage showed a price list per case, including a day rate. Buyers of
a result need a way to a price, not rates: each case now shows three steps
to an estimate, one line for orientation and a button that opens the
contact message with that topic chosen.

The developer case is booked by the month, not by the day. The day rate is
gone; the freelance page has the booking terms: 100 EUR per hour, fixed
days of the week agreed for one month at a time, an example month, monthly
invoice, two weeks notice to the end of a month.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-05 10:01:23 +02:00
co-authored by Claude Opus 5.5
parent 83616433e4
commit c7f8672cd0
8 changed files with 276 additions and 122 deletions
@@ -1,5 +1,6 @@
"use client";
import { onContactTopic } from "./contactTopic";
import * as React from "react";
import { useContent } from "@/src/components/ContentProvider";
import { CONTACT_EMAIL_PARTS } from "@/src/content/site";
@@ -61,6 +62,15 @@ export const ContactComposer: React.FC = () => {
setAddress(assembleEmail(CONTACT_EMAIL_PARTS));
}, []);
// A button elsewhere on the page can open the message with its topic chosen.
React.useEffect(
() =>
onContactTopic((id) => {
if (topics.some((item) => item.id === id)) setTopicId(id);
}),
[topics],
);
const topic = topics.find((item) => item.id === topicId) ?? topics[0];
const typed = useTyped(topic?.draft.body ?? "");