Survival LLM
인터넷 없이도 동작하는 무료 AI 어시스턴트와 150만 건 오프라인 자료를 제공, 답변 출처 표시, Mac·Windows 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗griffinlaszlo.com — mocial's sister desktop. The
griffinland icon on mocial.org brings you here in the
same tab, and the mocial icon here takes you back, from the same spot on the
desktop. The idea is that it feels like you never left: the windows, taskbar,
tray clock and fonts are mocial's, and only the desktop changes.
| File | Where it comes from |
|---|---|
main.css | mocial's stylesheet, copied as-is. Rules for mocial's own windows come along unused. |
main.js | mocial's shell, lifted word for word: icon dragging, the password gate, window fly-in/out, the taskbar, the world-clock tray, buildWindowChrome, the typed title. Comments starting griffinland: mark what's its own (the gate's games, and their windows being left off the taskbar) - keep those when copying the shell over again. |
griffinland.css | Styles for griffinland's own desktop. Anything new goes here, not in main.css. |
griffinland.js | griffinland's own desktop toys (below), built on main.js's shell. Loaded after it. |
gifs/ | mocial's own gifs, copied over for the toys to use. |
icons/ | Pixel desktop icons, drawn as SVG. |
supabase/guestbook.sql | Sets up the guestbook's table in Supabase. |
tools/griffin-rig.py | Cuts griffin's chairlift art into the animation layers in gifs/griffin/. |
tools/crew/*.svg, tools/crew-build.py | The other riders on the lift, drawn to match griffin's art, and the script that renders them into the layers in gifs/crew/. |
tools/workstation-cam.py, tools/desk-cam.command | The desk cam (below). |
Because these are copies, a fix to the shell on mocial has to be copied here
too. Keep main.css an exact copy and put griffinland's own styling in
griffinland.css - then updating is just copying the file over. If the two
desktops grow a lot, the next step is moving the shell into one shared file
both sites load.
New windows: build them with buildWindowChrome(win, "TITLE"), add their
title-bar icon to windowIcons, and open them with showPopup(id, iconEl) -
the same calls mocial uses.
Same doorman as mocial, with griffinland's own password: SITE_PASSWORD_HASH
in index.html is the hash of it. Two games flank the dialog, and both win
the password:
Finishing either game fills the password into the dialog, so the visitor only
has to hit OK. Changing the password means changing both the hash and
GATE_WORD in main.js (hashPassword("...") in the console gives the new
hash).
Since the games give the password to anyone who plays, the gate is a toy, not a lock, and the two sites don't carry an unlock across to each other: mocial asks for its own password.
Once a visitor is through the gate (or straight away, when there's no gate),
a "YOU HAVE ASCENDED" window opens: griffinland as the far side of the pearly
gates. The gates swing open, the spinning world rises out of them as an angel
and the WordArt waves, over a single centered "Enter paradise" button that
closes it. It's all CSS and SVG in griffinland.css and index.html; main.js
only adds the title bar, splits the WordArt into letters and opens it.
All in griffinland.js, each in its own section, with styles under matching
headings in griffinland.css. The desktop is forest green (--gl-forest).
standardMenus() builds
them; a window can add its own items to File, Edit or View.SPAM
list). Each ad's button spawns two more. griffinland AntiVirus turns up
afterwards to clear them; Escape works too.PROMO_URL. Point that at whatever's new.TIPS list.griffinlaszlo-dev key so testing never pads it. If the
service can't be reached, the counter hides.firSVG(), aspenSVG(), FOREST_ROWS). It's random, so a new one
grows on every load, and it's drawn once into an image so the moving
chairs never make the browser redraw it. The lift towers are doodled in colour to sit with the chair art
(towerSVG(): blue pole, ladder, yellow pad, braced cross-arm and the wheel
train the cable rides over), with a wobble filter on every line.
The lift runs both ways: a second rope behind carries chairs back down,
right to left. They're the empty chair mirrored, smaller and paler, and
ride behind the towers. Each tower has a second, smaller wheel train for
that rope (backTrainSVG()), and BACK_UP sets how far above the near
rope it sits.Everything that moves holds still for visitors who've asked their system for reduced motion. Below 960px the horizon steps aside and the badges move to the end of the page.
The two cameras on griffin's desk. Visitors only see them while griffin is ON AIR: the icon turns up, and each camera gets a view-only window with a fresh still each second and a LIVE badge, then an OFF AIR screen once it stops. Split screen (a button in each window, or View > Split screen) tiles them over the desktop, each picture fitted to its window on black, never cropped. Esc, the button again, or closing either window puts them back. Phone-sized screens stack every window anyway, so there it's hidden.
tools/griffin-rig.pyACTIONStools/crew/ to match griffin's art: his
three-quarter lounging pose, thin wobbly ink, marker-streaked fills. Each
rider comes in three looks - different people, by swapping the drawing's
colours (VARIANTS in tools/crew-build.py) - and griffinland.js deals
them out fresh on every visit, never the same look twice at once. Each
drawing marks its moving parts with an L- class, and
python3 tools/crew-build.py (Pillow and Chrome) renders every look's
parts as layers into gifs/crew/. Then bump CREW_VERSION in
griffinland.js. CREW_UP and CREW_DOWN there say which chairs carry whom.supabase/guestbook.sql creates it (run it once in the
project's SQL Editor), and SUPABASE_URL / SUPABASE_KEY at the top of the
guestbook section in griffinland.js point the site at it. The key is the
project's publishable key, which is public by design - row-level security
limits it to reading and signing. To delete an entry, use the Supabase
dashboard (Table Editor > guestbook). With the two left blank, entries stay
in each visitor's own browser instead. A hidden form field catches bots.