Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AI-powered multi-tenant platform that generates and deploys customizable websites from structured business data.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Weblix is a multi-tenant website management platform I'm building to simplify creating and maintaining websites for local businesses. It brings business information, website content, and eventually publishing into one application.
Today, you can manage businesses, edit structured website content, and review and confirm CSV imports. Website rendering, AI copy generation, and publishing are still planned.
Built with Next.js, React, TypeScript, and Supabase/PostgreSQL, using a human-directed, AI-assisted development workflow.
Features · Architecture · Engineering decisions · AI workflow · Run locally
Sign in at /login, add an example business from /admin, then open its Content tab to write and save its copy. Reload to see the saved content. On the Add business page, the Import from CSV tab lets you inspect a file before importing anything.
For a concrete example, upload a file with one valid row, a copy of that row, and a row with an invalid email. Review shows 1 valid, 1 duplicate, and 1 invalid. Cancel saves nothing; confirming saves one business. The full walkthrough includes the file and expected results.
There isn't an account-free demo or signup flow yet. Local setup creates test accounts; an existing installation requires an account in its Supabase project. The content editor saves copy—it doesn't render or publish a website yet.
Weblix runs as one Next.js App Router application. Server-rendered pages load data; interactive forms call server actions to check access and validate input. Repository functions handle database access through Supabase with the signed-in user's session. PostgreSQL row-level security (RLS) checks which records that user can read or change.
| Component | Responsibility |
|---|---|
| Next.js 16, React 19, strict TypeScript | Routes, forms, server actions, and application logic in apps/web |
| Tailwind CSS v4 | Application styling |
| Zod | Validates business details and website content; CSV rows reuse business validation |
| Supabase Auth + PostgreSQL | Sign-in, saved data, ownership rules, and import transactions |
| Vitest + Testing Library | Application and component tests; separate SQL and Python suites check database behavior |
The interface, business logic, and database access stay separate within one app. That keeps the current workflows in one deployable unit without a separate API service or worker to maintain. Background generation jobs aren't implemented.
The migrations define three tables: businesses holds business facts and ownership, website_content holds an optional content document per business, and business_import_receipts records import requests and counts for retries. Deleting a business removes its content; import receipts remain so earlier requests can still be recognized.
Problem: Knowing a business's URL shouldn't let another account read or change it. Hiding a link isn't an access check.
Solution: Pages and actions check the signed-in user, business queries include the owner's ID, and PostgreSQL RLS enforces ownership for database requests too. Content permissions follow the parent business, including attempts to move content to another business.
Tradeoff: Both paths need testing. App tests alone can't establish that direct database requests are restricted correctly.
Evidence: Business access testing covers browser flows, replayed requests, and two-user database checks. Content SQL tests check cross-account access, reassignment, and deletion behavior.
Problem: A content edit can change several sections and their order. Saving those pieces separately would leave room for a partly saved page.
Solution: Save the content as one JSON document in a single database operation, separate from business facts. Zod checks field names, lengths, and list sizes; database constraints also reject malformed documents. A mapping function prepares the data for a future renderer without inventing missing business claims.
Tradeoff: The last successful save wins. There is no revision history or merging of concurrent edits. The mapping is implemented; the rendered website preview isn't.
Evidence: Content schema, persistence behavior, and implementation and testing in PR #25.
Problem: An import can finish saving just as the connection drops. A missing response doesn't tell the user whether the businesses were saved, and submitting a new import could create them twice.
Solution: A signed review ties the file to the user and a request key. Confirmation checks the file again, then a database function gets the owner from auth.uid() and saves the batch and its receipt in one transaction. Requests with the same user and key run one at a time; retrying returns the original count. Changing the data while reusing that key is rejected.
Tradeoff: Receipts must be kept, and the signing secret must stay stable. Retry the same import from the retained page if its result is unknown. A new review creates a new request; duplicate checks only compare rows within the file, not existing businesses.
Evidence: Transaction and receipt migration, implementation PR #35, and separate testing in PR #39, including simultaneous requests, rollback, a lost response after saving, and account/token tampering checks.
I set the product direction, approve scope, and establish engineering standards. I review what to accept and merge, while deployment follows defined authorization rules. Agents help inspect the code, prepare GitHub issues, implement changes, and collect test results.
Development orchestration: Weblix uses public repository instructions alongside a separate private planning and coordination workspace. The private workspace keeps broader project context and supports planning, task preparation, and status reporting. This repository contains the application code, implementation instructions, issues, PRs, and testing evidence, so the delivered work and engineering decisions can be evaluated here.
The project instructions set architecture and quality standards. The planning guide covers preparing issues with acceptance criteria, checking dependencies and ownership, and starting implementation when requested. The delivery workflow calls for isolated worktrees, relevant checks, and draft PRs. Code changes require running-app verification and Copilot review of the current revision; documentation-only changes have lighter checks. Valid findings are fixed and reviewed again, with a limit on review rounds. Blocked verification or unresolved findings keep the PR in draft.
Separate reviews of whether a feature meets its intended outcome also draw on private coordination and task-specific instructions. The CSV import is a public example: issue #23 defined the task, PR #35 implemented it, and Copilot reviewed the final revision. A separate pass tested the full workflow locally in PR #39. Copilot found no defects and still recommended human review of the security-sensitive code.
Planning and coordination sit outside the application runtime. These instructions guide the work; they aren't an automatically enforced GitHub gate or proof that every past change followed today's process. CI automates the checks described below. Review comments and passing checks help me decide what to accept, but they don't replace trying the feature.
main.These checks cover specific behavior. A hosted installation still needs its migrations, settings, and signed-in workflows checked; passing tests or a successful deployment doesn't establish production readiness. See the hosted setup and permission checks.
main.Requires Git, Node.js 22, npm, Python 3.9+, running Docker, and the Supabase CLI (verified with 2.31.8).
git clone https://github.com/kaylahellbusch/weblix-platform.git
cd weblix-platform
python3 scripts/local-db.py start
cd apps/web
npm ci
openssl rand -hex 32
Add the generated value as server-only CSV_REVIEW_SECRET in apps/web/.env.local, then run npm run dev. Open localhost:3000/login and sign in with the test-account values in that file.
See the development guide for account details, environment-file precautions, database management, and troubleshooting.
main.