Initial upload of BB-Apartment 2026 website.

Adds the complete Next.js website including i18n routing, house and
apartment pages, Beds24 v2 integration for live availability/pricing,
Stripe checkout, contact forms, Docker setup and deployment docs.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Markus
2026-08-19 22:54:49 +02:00
co-authored by Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent 232770afe7
commit 2b24334bfa
153 changed files with 5621 additions and 176 deletions
+65
View File
@@ -0,0 +1,65 @@
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Booking {
id String @id @default(cuid())
bookingReference String @unique
apartmentSlug String
houseId String
beds24PropertyId String
beds24RoomId String
guestEmail String
guestName String
checkIn DateTime
checkOut DateTime
nights Int
totalAmount Decimal @db.Decimal(10, 2)
depositAmount Decimal @db.Decimal(10, 2)
currency String @default("EUR")
status String @default("pending") // pending, deposit_paid, confirmed, cancelled
// Stripe mapping (per house account)
stripeAccountId String
stripeCustomerId String?
stripeCheckoutSessionId String?
stripePaymentIntentId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
invoices Invoice[]
}
model Invoice {
id String @id @default(cuid())
bookingId String
booking Booking @relation(fields: [bookingId], references: [id], onDelete: Cascade)
invoiceNumber String @unique
amount Decimal @db.Decimal(10, 2)
currency String @default("EUR")
dueDate DateTime
status String @default("pending") // pending, paid, overdue, cancelled
// Stripe invoice mapping
stripeInvoiceId String?
stripeInvoiceUrl String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model StripeEvent {
id String @id @default(cuid())
eventId String @unique
accountId String
type String
payload String
processedAt DateTime @default(now())
}