Survival LLM
인터넷 없이도 동작하는 무료 AI 어시스턴트와 150만 건 오프라인 자료를 제공, 답변 출처 표시, Mac·Windows 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Personal site. Next.js (App Router) + shadcn, with figures drawn by mdxcn and type set in Geist Pixel.
components.json)registry/default (the @mdxcn registry is set up in components.json)registry/tino, built on the mdxcn frame and Base UI for interactive partsgeist packagelib/github.ts)bun install
bun run dev
Open http://localhost:3000.
agent-browser is a dev dependency. test:home
serves the production build and checks both views of /: zero axe-core
violations and "good" Core Web Vitals. It writes screenshots to
artifacts/home/, plus home.mp4 with RECORD=1.
bun run build && bun run test:home
BASE_URL=https://tino.software bun run test:home # check a deployment
bun run test:tino-md # Host: tino.md rewrite/404/redirect
CI runs test:home on every PR and posts the screenshots and video as a
comment (media is stored on the pr-media branch).
lib/github.ts pulls profile, repos, and recent public events for gravitinos.
Contribution counts come from the GitHub GraphQL API when GITHUB_TOKEN is set,
otherwise from the public github-contributions-api.jogruber.de proxy. A token
also lifts the 60 req/h unauthenticated rate limit, and the repo count becomes
public_repos + total_private_repos from authenticated /user. If the token is
rejected (401/403), the server logs the failure and falls back to public data.
The year grid (registry/tino/graph-year) shows each day as a square. Hover,
focus, or tap a cell for a readout like Oct 12 · 14 contributions; arrow keys
move with a roving tabindex. Phones show the last 26 weeks. A less→more legend
sits under the grid. The markdown twin keeps the weekly sparkline and adds
plain-text tables: last 30 days, busiest day, current/longest streak, and
monthly totals (lib/contributions.ts, rendered from lib/markdown.ts).
The "last commit" timer takes the newest of the most recently pushed repo's
pushed_at (updates immediately) and the newest push event (can lag by hours,
but covers repos the user doesn't own). Those two small requests refresh every
5 minutes; the rest of the GitHub data stays hourly. With a token belonging to
gravitinos (classic token with repo scope), private pushes such as
tino.build count too; only the timestamp is shown, never the repo name.
Without a token it only sees public pushes.
If GitHub is unreachable, the stats block is hidden.
Every page renders an HTML and a raw-markdown version. On tino.software, the
md control in [ html / md ] links to the matching
tino.md URL (/ → https://tino.md/). Press m or use
?view=md for the in-page markdown preview (data-view on <html>; an
inline script applies a saved choice before first paint). The home page
markdown is also served at /index.md with
Content-Type: text/markdown; charset=utf-8.
proxy.ts serves the markdown twin at the page's own URL when the request
asks for text/markdown or comes from a terminal client (curl, wget,
HTTPie, xh), so curl tino.software prints markdown. Browsers still get HTML.
tino.md is the canonical markdown twin of tino.software.
When the request Host is tino.md (or www.tino.md), proxy.ts maps any
path P to the existing markdown route for P (/ → /index.md,
/foo → /foo.md when that handler exists) and returns it as-is. Explicit
/foo.md paths work the same way. Unknown paths get a clean 404 markdown
body. www.tino.md permanently redirects to tino.md.
Markdown served on tino.software links to the matching tino.md URL; markdown on tino.md links back to the HTML page on tino.software. HTML negotiation on tino.software is unchanged.
curl -sS https://tino.md
curl -sS -H 'Host: tino.md' http://localhost:3000/
curl -sS -H 'Host: tino.md' http://localhost:3000/index.md
opengraph-image.tsx next to each page draws its share card with next/og:
the big pixel word, the page's line, and for / the contribution grid and last
commit (refreshed with the page, every 5 minutes). Shared pieces live in
lib/og.tsx. The renderer can't read woff2 or oklch(), so Geist Pixel and
Geist Mono are copied as TTF into assets/fonts (OFL, license alongside) and
the dark-theme colors are repeated there as hex.
Following a link glides the big pixel word into the next page's word (React's
<ViewTransition>, components/page-transition.tsx); the rest of the page
swaps instantly. The home page sets data-still, so its figures render in
place instead of fading in on scroll.
The copy in registry/default is a fork: the components are Server Components
and their enter animations are CSS (graph-enter / graph-fade in
app/globals.css) instead of motion. A small client probe,
graph-frame/graph-reveal.tsx, inside <Graph> marks the figure
data-inview to start them. Only graph-timer and graph-countdown stay
client components, because they tick.
Pulling a new component from upstream still works, but it arrives written
against motion; convert it the same way before using it:
bunx shadcn@latest add @mdxcn/graph-table
Components that fit the mdxcn look but are not part of it. They reuse the
graph-frame base and the --graph-* tokens. Interactive behavior (focus,
keyboard, ARIA) comes from Base UI; keep the component itself a Server
Component and let only the Base UI parts hydrate.
graph-tabs: panels in one frame. ## heading sections or <Tab label> children.bun run clone:effect
Source lands in reference/effect-v3/ (gitignored).