fix: remove Herrnhof Villa from accommodation options

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-04-07 11:34:25 -04:00
parent b02ebcacae
commit d6e33f12e3
5 changed files with 5 additions and 160 deletions

View File

@ -42,11 +42,6 @@ const PROCESSING_FEE_PERCENT = 0.02 // 2% to cover Mollie payment processing fee
const ACCOMMODATION_PRICES: Record<string, { label: string; price: number }> = {
"ch-multi": { label: "Bed in shared room (Commons Hub)", price: 279.30 },
"ch-double": { label: "Bed in double room (Commons Hub)", price: 356.30 },
"hh-single": { label: "Single room (Herrnhof)", price: 665 },
"hh-double-separate": { label: "Double room, separate beds (Herrnhof)", price: 420 },
"hh-double-shared": { label: "Double room, shared double bed (Herrnhof)", price: 350 },
"hh-triple": { label: "Triple room (Herrnhof)", price: 350 },
"hh-daybed": { label: "Daybed or extra bed in living room (Herrnhof)", price: 280 },
}
// Public base URL

View File

@ -117,47 +117,6 @@ export default function FinancialTransparencyPage() {
</div>
</div>
<h4 className="font-semibold mb-3">Herrnhof Villa (nearby)</h4>
<p className="text-xs text-muted-foreground mb-3">
Historic 19th-century mansion with newly renovated apartments, sauna, and river swimming platform.
All prices per person for 7 nights (incl. city tax &amp; VAT).
</p>
<div className="space-y-3 mb-6">
<div className="bg-muted/50 p-4 rounded-lg">
<div className="flex justify-between items-baseline">
<span className="text-sm font-medium">Single room</span>
<span className="text-lg font-bold">665<span className="text-sm font-normal text-muted-foreground"> (95/night)</span></span>
</div>
</div>
<div className="bg-muted/50 p-4 rounded-lg">
<div className="flex justify-between items-baseline">
<span className="text-sm font-medium">Double room (separate beds)</span>
<span className="text-lg font-bold">420<span className="text-sm font-normal text-muted-foreground">/person (60/night)</span></span>
</div>
</div>
<div className="bg-muted/50 p-4 rounded-lg">
<div className="flex justify-between items-baseline">
<span className="text-sm font-medium">Double room (shared double bed)</span>
<span className="text-lg font-bold">350<span className="text-sm font-normal text-muted-foreground">/person (50/night)</span></span>
</div>
</div>
<div className="bg-muted/50 p-4 rounded-lg">
<div className="flex justify-between items-baseline">
<span className="text-sm font-medium">Triple room (one single, one shared double bed)</span>
<span className="text-lg font-bold">350<span className="text-sm font-normal text-muted-foreground">/person (50/night)</span></span>
</div>
</div>
<div className="bg-muted/50 p-4 rounded-lg">
<div className="flex justify-between items-baseline">
<span className="text-sm font-medium">Daybed or extra bed in living room</span>
<span className="text-lg font-bold">280<span className="text-sm font-normal text-muted-foreground">/person (40/night)</span></span>
</div>
</div>
<p className="text-xs text-muted-foreground">
For whole-apartment quotes, contact <a href="mailto:office@commons-hub.at" className="text-primary hover:underline">office@commons-hub.at</a>.
</p>
</div>
<div className="pt-4">
<h4 className="font-semibold mb-3">Other accommodation nearby:</h4>
<ul className="space-y-2 text-sm text-muted-foreground">
@ -215,7 +174,7 @@ export default function FinancialTransparencyPage() {
<p className="text-sm text-muted-foreground italic pt-4">
*With regular pricing (120 ticket), total would be 399.30. With late pricing (150 ticket), total
would be 429.30. Herrnhof Villa accommodation starts from 280/person for the week (40/night).
would be 429.30.
</p>
</CardContent>
</Card>

View File

@ -28,11 +28,6 @@ function getCurrentTier() {
const ACCOMMODATION_PRICES: Record<string, { label: string; price: number }> = {
"ch-multi": { label: "Bed in shared room (Commons Hub)", price: 279.30 },
"ch-double": { label: "Bed in double room (Commons Hub)", price: 356.30 },
"hh-single": { label: "Single room (Herrnhof)", price: 665 },
"hh-double-separate": { label: "Double room, separate beds (Herrnhof)", price: 420 },
"hh-double-shared": { label: "Double room, shared double bed (Herrnhof)", price: 350 },
"hh-triple": { label: "Triple room, one single + one shared double bed (Herrnhof)", price: 350 },
"hh-daybed": { label: "Daybed or extra bed in living room (Herrnhof)", price: 280 },
}
// ── Promo codes ───────────────────────────────────────────────
@ -56,7 +51,7 @@ export default function RegisterForm({ tierOverride, promoCode, banner }: Regist
const [isSubmitting, setIsSubmitting] = useState(false)
const [includeAccommodation, setIncludeAccommodation] = useState(true)
const [wantFood, setWantFood] = useState(false)
const [accommodationVenue, setAccommodationVenue] = useState<"commons-hub" | "herrnhof">("commons-hub")
const [accommodationVenue, setAccommodationVenue] = useState<"commons-hub">("commons-hub")
const [accommodationType, setAccommodationType] = useState("ch-multi")
const [formData, setFormData] = useState({
name: "",
@ -207,32 +202,6 @@ export default function RegisterForm({ tierOverride, promoCode, banner }: Regist
</div>
{includeAccommodation ? (
<div className="mt-3 space-y-4">
{/* Venue selection */}
<RadioGroup
value={accommodationVenue}
onValueChange={(value: string) => {
const venue = value as "commons-hub" | "herrnhof"
setAccommodationVenue(venue)
setAccommodationType(venue === "commons-hub" ? "ch-multi" : "hh-single")
}}
className="space-y-2"
>
<div className="flex items-center space-x-2">
<RadioGroupItem value="commons-hub" id="venue-ch" />
<Label htmlFor="venue-ch" className="font-medium cursor-pointer text-sm">
Commons Hub
</Label>
</div>
<div className="flex items-center space-x-2">
<RadioGroupItem value="herrnhof" id="venue-hh" />
<Label htmlFor="venue-hh" className="font-medium cursor-pointer text-sm">
Herrnhof Villa
</Label>
</div>
</RadioGroup>
{/* Sub-options per venue */}
{accommodationVenue === "commons-hub" ? (
<div className="pl-6 border-l-2 border-primary/20">
<p className="text-xs text-muted-foreground mb-2">
30 beds on-site at the main venue. Basic, communal accommodation.
@ -256,54 +225,6 @@ export default function RegisterForm({ tierOverride, promoCode, banner }: Regist
</div>
</RadioGroup>
</div>
) : (
<div className="pl-6 border-l-2 border-primary/20">
<p className="text-xs text-muted-foreground mb-2">
Historic 19th-century mansion with newly renovated apartments, sauna,
and river swimming platform. Prices per person for 7 nights (incl. city tax &amp; VAT).
</p>
<RadioGroup
value={accommodationType}
onValueChange={setAccommodationType}
className="space-y-2"
>
<div className="flex items-center space-x-2">
<RadioGroupItem value="hh-single" id="hh-single" />
<Label htmlFor="hh-single" className="font-normal cursor-pointer text-sm">
Single room 665 (95/night)
</Label>
</div>
<div className="flex items-center space-x-2">
<RadioGroupItem value="hh-double-separate" id="hh-double-separate" />
<Label htmlFor="hh-double-separate" className="font-normal cursor-pointer text-sm">
Double room (separate beds) 420 (60/night per person)
</Label>
</div>
<div className="flex items-center space-x-2">
<RadioGroupItem value="hh-double-shared" id="hh-double-shared" />
<Label htmlFor="hh-double-shared" className="font-normal cursor-pointer text-sm">
Double room (shared double bed) 350 (50/night per person)
</Label>
</div>
<div className="flex items-center space-x-2">
<RadioGroupItem value="hh-triple" id="hh-triple" />
<Label htmlFor="hh-triple" className="font-normal cursor-pointer text-sm">
Triple room (one single, one shared double bed) 350 (50/night per person)
</Label>
</div>
<div className="flex items-center space-x-2">
<RadioGroupItem value="hh-daybed" id="hh-daybed" />
<Label htmlFor="hh-daybed" className="font-normal cursor-pointer text-sm">
Daybed or extra bed in living room 280 (40/night per person)
</Label>
</div>
</RadioGroup>
<p className="text-xs text-muted-foreground mt-2">
For whole-apartment quotes, contact{" "}
<a href="mailto:office@commons-hub.at" className="text-primary hover:underline">office@commons-hub.at</a>.
</p>
</div>
)}
</div>
) : (
<p className="text-sm text-muted-foreground mt-1">

View File

@ -21,27 +21,6 @@ const ACCOMMODATION_CRITERIA: Record<
bedTypes: ["double", "double (shared)"],
roomFilter: (room) => room === "2",
},
"hh-single": {
venue: "Herrnhof Villa",
bedTypes: ["double"],
},
"hh-double-separate": {
venue: "Herrnhof Villa",
bedTypes: ["single"],
},
"hh-double-shared": {
venue: "Herrnhof Villa",
bedTypes: ["double (shared)"],
},
"hh-triple": {
venue: "Herrnhof Villa",
bedTypes: ["double (shared)"],
roomFilter: (room) => room.toLowerCase().includes("triple"),
},
"hh-daybed": {
venue: "Herrnhof Villa",
bedTypes: ["couch"],
},
}
interface BedRow {
@ -65,7 +44,7 @@ interface BookingResult {
* Parse the booking spreadsheet to extract bed information.
*
* Expected sheet structure:
* - Two venue sections: "Commons Hub" and "Herrnhof Villa" appear as section headers
* - Venue sections (e.g. "Commons Hub") appear as section headers
* - Below each header: column headers with Room, Bed Type, then date columns
* - Bed rows follow with room number, bed type, and occupant names in date columns
* - Room numbers may be merged (only first row of a room group has the room number)
@ -96,15 +75,6 @@ function parseBookingSheet(data: string[][]): BedRow[] {
lastRoom = ""
continue
}
if (
firstCell.toLowerCase().includes("herrnhof") ||
firstCell.toLowerCase().includes("villa")
) {
currentVenue = "Herrnhof Villa"
inDataSection = false
lastRoom = ""
continue
}
if (!currentVenue) continue

View File

@ -152,7 +152,7 @@ export async function sendPaymentConfirmation(
data.accommodationVenue
? `<p>Your accommodation at the <strong>${data.accommodationVenue}</strong>${data.accommodationRoom ? ` (Room ${data.accommodationRoom})` : ""} has been reserved for the duration of the gathering.</p>
<p>We'll be in touch about food arrangements as we work to keep costs down while creating inclusive, participatory processes for the event.</p>`
: `<p>We'll be in touch about food arrangements as we work to keep costs down while creating inclusive, participatory processes for the event. If you haven't yet decided on accommodation, the <strong>Commons Hub</strong> (our main venue) and the nearby <strong>Herrnhof Villa</strong> are the most convenient options &mdash; right in the heart of the gathering. Email <a href="mailto:contact@cryptocommonsgather.ing" style="color: #f59e0b;">contact@cryptocommonsgather.ing</a> for any questions.</p>`
: `<p>We'll be in touch about food arrangements as we work to keep costs down while creating inclusive, participatory processes for the event. If you haven't yet decided on accommodation, the <strong>Commons Hub</strong> (our main venue) is the most convenient option &mdash; right in the heart of the gathering. Email <a href="mailto:contact@cryptocommonsgather.ing" style="color: #f59e0b;">contact@cryptocommonsgather.ing</a> for any questions.</p>`
}
<h3 style="color: #92400e;">What's Next?</h3>