Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A clean rental property management app for tracking properties, tenants, leases, payments, expenses, and maintenance. Built with Next.js 15 + Supabase + Tailwind.README 전문 보기 ↗A clean rental property management app for tracking properties, tenants, leases, payments, expenses, and maintenance. Built with Next.js 15 + Supabase + Tailwind.
supabase/schema.sql and click Rundocuments, set as Privatesupabase/storage-policies.sql and Run (enables per-user file isolation)http://localhost:3000 for local) and add <your-domain>/auth/callback to redirect URLsanon public keycp .env.example .env.local
Edit .env.local and paste in your Supabase URL and anon key.
npm install
npm run dev
Open http://localhost:3000 — it'll redirect you to login. Sign up with your email, confirm via the email Supabase sends, then start adding properties.
git add . && git commit -m "Initial rental management app"
git push origin main
On Vercel:
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY)Enable the tenant portal "Pay rent" flow.
https://your-domain.com/api/stripe/webhookpayment_intent.succeeded, payment_intent.processing, payment_intent.payment_failed, payment_intent.canceled, invoice.paid, invoice.payment_succeeded, invoice.payment_failed, setup_intent.succeededwhsec_)STRIPE_SECRET_KEYNEXT_PUBLIC_STRIPE_PUBLISHABLE_KEYSTRIPE_WEBHOOK_SECRETSUPABASE_SERVICE_ROLE_KEY (used by the webhook handler only)supabase/v9-stripe-payments.sql in the Supabase SQL Editor to add Stripe columns to tenants, leases, and payments plus the tenant_payment_methods table.stripe listen --forward-to localhost:3000/api/stripe/webhook and use the printed whsec_ value for STRIPE_WEBHOOK_SECRET.ACH payments take 3–5 business days to clear. Until they do, the payment shows as Processing in both the tenant and landlord views. Cards clear instantly.
app/
(app)/ # Authenticated routes (sidebar layout)
page.tsx # Dashboard
properties/ # List + new
tenants/ # List + new (auto-creates lease)
payments/ # Bulk collection + new
expenses/ # List + new
maintenance/ # List + new
reports/ # P&L and category breakdowns
layout.tsx # Sidebar wrapper
login/page.tsx # Sign in / sign up
layout.tsx # Root
components/Sidebar.tsx
lib/supabase/
client.ts # Browser client
server.ts # Server client
middleware.ts # Auth gate
supabase/schema.sql # Database schema (run once)
Every payment is tagged as Rent or Security deposit on the record-payment
form (/payments/new, or "Record deposit" from the command palette).
supabase/v13-payment-type.sql adds the payment_type column; it is applied
automatically (see Database migrations below). Payments recorded before it
are backfilled as rent.Until that migration is run the app still shows your complete payment history — every payment is simply treated as rent, and the Payments page shows a banner pointing at the migration. Recording rent keeps working; recording a deposit asks you to run the migration first rather than saving it as rent.
Schema changes ship with the code — no pasting SQL into the dashboard.
One-time setup: in Supabase go to Project Settings → Database → Connection
string → URI, copy the Session pooler URI (the direct host is IPv6-only and
GitHub's runners can't reach it), and add it to GitHub under
Settings → Secrets and variables → Actions as SUPABASE_DB_URL.
After that, every push to main that touches supabase/** runs
.github/workflows/migrate.yml, which applies whatever is outstanding. You can
also trigger it by hand from the Actions tab (with a "list only" option), or
run it locally:
export SUPABASE_DB_URL="postgresql://..."
npm run migrate:check # list what would run, change nothing
npm run migrate # apply
How it works
supabase/migrations.json lists every SQL file in dependency order. Add each
new migration to the end of that list.public.schema_migrations, so runs are
idempotent — re-running applies nothing.DROP TABLE, DROP COLUMN, TRUNCATE, or DELETE FROM unless you
explicitly set ALLOW_DESTRUCTIVE=1.A brand-new Supabase project still needs the private documents storage bucket
created by hand (Storage → New bucket) — that isn't a SQL migration.
units table. The "Add property" form creates a single default unit; for a duplex you'd add a second unit manually (UI for this comes in Phase 2).NUMERIC(10,2) — no float precision issues.(app) route group is a Next.js convention — it groups authenticated pages under one shared layout (sidebar) without affecting URLs.