openjutsu
영상에서 원클릭으로 인물 교체, ComfyUI·MiniMax H3 기반 오픈소스 로컬 힉스필드 겐주츠 대안, FLUX.3 Klein 재조명 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Bilingual (Hungarian/English) poetry portfolio: React, TypeScript, Vite and Motion in a TurboRepo monorepo, with an Express + Firestore admin portal. Swipeable full-screen poem reader, auto-advancing carousel, working contact form, WCAG AA contrast, and CI that gates every deploy on Playwright layout tests.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Bilingual (Hungarian/English) poetry portfolio. Every route is prerendered to static HTML, so the poems are indexable without JavaScript, and an admin portal edits the content live.
Live: https://artoriun.github.io/kov-cs-poetry/
Measured against the live deploy. CI runs the same audit on every push and gates accessibility, best practices and SEO at 100.
Mobile — LCP 2.7s · CLS 0 · TBT 0ms
Desktop — LCP 0.6s · CLS 0.004 · TBT 0ms
| Front end | React, TypeScript, Vite, Motion |
| Back end | Express, Firestore |
| Media | Cloudinary |
| Tooling | TurboRepo, Biome, Playwright |
| Hosting | GitHub Pages (site) · Render (API) |
Three workspaces: packages/web, packages/api, packages/shared.
npm install
npm run dev # web + API, with /api proxied in development
Copy .env.example to packages/api/.env and set at least:
ADMIN_PASSWORD= # or ADMIN_PASSWORD_HASH from `npm run hash-password`
JWT_SECRET=
FIREBASE_PROJECT_ID= # plus CLIENT_EMAIL, PRIVATE_KEY, STORAGE_BUCKET
CLOUDINARY_URL=
Contact email (RESEND_API_KEY or SMTP) is optional — without it the form returns 503 rather
than dropping messages. Firestore is optional too: leave the FIREBASE_* lines commented and
the API still starts and serves the bundled poems, so a fresh clone runs before you have signed
up for anything. The site runs with no API at all in the same way — the poems are in the bundle,
and the portal is simply unreachable.
npm run build # production build
npm run prerender # static HTML per route, sitemap and robots
npm run ci # everything CI runs, in order
npm run test # API and unit tests
npm run test:e2e # Playwright, four viewport and touch profiles
npm run check:lighthouse # accessibility / SEO / best-practices gate
npm run hash-password # prints an ADMIN_PASSWORD_HASH
npm run backup-poems # writes the live poems to backups/
prefers-reduced-motion respectedPassword login with JWT auth at /admin. Create, edit, hide and drag-to-reorder poems,
feature them on the home carousel, and upload images.
Hiding takes a poem off the site without destroying it: the card stays in the portal, marked and in its place in the order, with a button that puts it back. Nothing in the portal deletes anything permanently, which matters most for poems written there — their text exists nowhere else.
Sign-in is throttled three ways: three wrong passwords in a row pause it for thirty seconds, which the form counts down rather than calling a lockout an incorrect password, and two fifteen-minute limits sit behind that as the real ceiling — one in memory, one in Firestore so it survives a restart.
List is where a poem is written: the image preview sits beside the fields that produce it, because the text is laid over the image rather than beside it. Order is the same poems as cards, dragged into the sequence readers meet them in, beside a contents sidebar that mirrors the public one. Dragging either the cards or the sidebar reorders both, and the change is live for visitors straight away.
On a touch screen each sidebar entry is dragged by its grip. Reordering and scrolling are both vertical in a list like that, so the grip is what tells the browser which one a touch means — everywhere else on the row still scrolls.
Edits are live for visitors immediately. The prerendered HTML that crawlers read is a build-time snapshot and catches up on the next deploy — weekly by cron, or on demand.
Pages are filled with whole stanzas, so most poems need no markers at all: the reader breaks between stanzas and only splits one when that stanza alone is taller than the viewport.
Typing \n in a poem's text marks where it continues on a new page over the same background.
It is part of the poem text, so it needs no schema change, and a poem without one is a single
page. The reader never merges across a break, and still subdivides one further if it is too
tall for the viewport.
npm run ci runs the pipeline in CI's order: Biome, tsc, API and unit tests, Playwright
layout tests across four viewport and touch profiles, an axe accessibility sweep in both
themes, a gzipped bundle budget, a first-paint-versus-hydrated check, and Lighthouse against
the built output.
main; the deploy job needs every check to pass first.CORS_ORIGIN there, and add the API URL as the
VITE_API_URL GitHub Actions secret..nvmrc).Poems live in packages/shared/src/index.ts as a fallback; portal edits are stored in
Firestore and take precedence at runtime.
All rights reserved — see LICENSE. The source is published to be read, not reused: this is client work, and the poems and photographs belong to their author.