Agentero
에이전트를 연결해 로컬 Vault에 연구 컨텍스트를 보관·Zotero에서 무결점 이동·읽고 이해·재활용
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A fast, free, SEO-first text case converter — Title Case, Sentence case, camelCase, snake_case and more. Supports AP, APA, MLA, Chicago and Standard style guides. Built with Next.js 16 + React 19.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A fast, free, SEO-first text case converter built with Next.js 16 and React 19.
Convert text to Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case and more — with proper support for AP, APA, MLA, Chicago and Standard style guides.
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router) |
| UI | React 19 + shadcn/ui (New York) |
| Styling | Tailwind CSS v4 + OKLch tokens |
| Language | TypeScript 5 (strict) |
| Testing | Vitest 4 |
| Linting | ESLint 9 + eslint-config-next |
| Deployment | Docker + Nginx on Hetzner VPS |
| CI/CD | GitHub Actions (lint → test → SEO QA → SSH deploy) |
Requirements: Node.js 22+ and npm.
git clone https://github.com/o-sorik/title-converter.git
cd title-converter
npm install
cp .env.example .env.local # set OPENAI_API_KEY if you need it
npm run dev
Open http://localhost:3000.
| Command | Purpose |
|---|---|
npm run dev | Start the dev server |
npm run build | Production build |
npm run start | Serve the production build |
npm run test | Run the full Vitest suite |
npm run lint | ESLint |
npm run seo:qa | Validate canonical URLs, metadata, JSON-LD |
npm run release:gate | Full pre-release gate (lint + test + SEO QA) |
npm run postchange:validate | Post-deploy route & performance checks |
npm run template:qa | Content template quality checks |
npm run intent:qa | Cannibalization / intent ownership checks |
npm run secrets:scan | Scan for leaked secrets |
Run
npm run release:gatebefore every release — CI enforces the same checks.
app/ Next.js App Router pages (homepage, [slug] converters, blog, rules guide)
components/ Feature components — text-converter, batch-checker, site-shell, json-ld
ui/ shadcn/ui primitives (auto-generated, do not edit)
lib/ Business logic: converters.ts, seo-config.ts, blog-view-model.ts, ...
scripts/ Operational scripts (.mjs) — SEO QA, release gate, deploy helpers
docs/ops/ Runbooks, architecture notes, SEO checklists
nginx/ Reverse proxy config
Dockerfile Multi-stage build (deps → builder → runner)
docker-compose.yml Production container
.github/workflows/ci.yml Lint + test + SEO QA + SSH deploy on push to main
Core logic lives in lib/converters.ts:
import { convert, convertWithExplanations } from "@/lib/converters";
convert("the quick brown fox", "title", { titleStyle: "ap" });
// → "The Quick Brown Fox"
convertWithExplanations("a tale of two cities", "title", { titleStyle: "chicago" });
// → tokens with per-word capitalization rules
title | upper | lower | sentence | camel | pascal | snake | kebab | alternating | inversestandard | ap | chicago | mla | apaTo add a new mode: extend the ConversionType union → implement the case in convert() → register the slug in lib/seo-config.ts → add tests.
This project treats SEO as a first-class concern, not a footer concern.
https://titlecaseconverter.online (apex, no www)npm run intent:qaWebApplication + FAQPage on converter pages, BlogPosting + BreadcrumbList on articlesdynamicParams = false on every [slug] route/is/[term] answers "Is X capitalized?" queries from a content registryapp/sitemap.ts and app/robots.tsFull ruleset: see docs/ops/SEO_QA_CHECKLIST.md and docs/ops/TAXONOMY_AND_CANNIBALIZATION_RULES.md.
npm run test # full Vitest run
npx vitest # watch mode
Tests are co-located with their source (lib/converters.ts → lib/converters.test.ts) and cover all conversion logic, blog view models, SEO config, and page metadata.
Production runs on a Hetzner VPS via Docker Compose + Nginx with Let's Encrypt SSL.
ssh deploy@<server>
cd /var/www/titlecaseconverter
git pull origin main
docker compose build --no-cache
docker compose up -d
Pushes to main trigger the GitHub Actions workflow, which gates on lint + test + SEO QA before SSHing into the server and rolling the container. Full runbook in docs/ops/DEPLOY_RUNBOOK_HETZNER.md.
Current priorities and recent decisions live in:
ROADMAP.md — long-term plandocs/ops/BACKLOG.md — current sprintdocs/ops/DECISIONS.md — architecture decision logIssues and PRs are welcome. Before opening a PR:
npm run release:gate — it must pass cleanly.feat:, fix:, chore:, test:, docs:).lib/ functions need co-located tests.Built and maintained by @o-sorik.