CleanFrame
삼성 The Frame용 개인 홈 화면, 포크와 맞춤을 위한 시작점
Anghkooey는 선택을 만든 선호와 경험을 기억해 필요할 때 관련 맥락을 다시 제공합니다
Anghkooey remembers the preferences and experiences that shape your choices, then brings the relevant context back when you need help again.
라이프스타일TypeScript · HTMLGitHub @Devendurance온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
You shouldn't have to explain yourself twice.
A personal AI concierge that remembers how you like things.
Anghkooey brings relevant preferences, constraints, and past experiences back into your next conversation — starting with hotels, travel, and dining.
Most assistants can answer a question. Fewer can carry forward the reason behind your preferences.
A quiet hotel room matters differently when you've said road noise kept you awake on your last trip. Anghkooey is designed to remember that context — when you consent to saving it — and use it when it becomes relevant again.README 전문 보기 ↗A personal AI concierge that remembers how you like things.
Anghkooey brings relevant preferences, constraints, and past experiences back into your next conversation — starting with hotels, travel, and dining.
Explore the experience · How memory works · Run locally · Architecture · Documentation
Most assistants can answer a question. Fewer can carry forward the reason behind your preferences.
A quiet hotel room matters differently when you've said road noise kept you awake on your last trip. Anghkooey is designed to remember that context — when you consent to saving it — and use it when it becomes relevant again.
The idea is simple: remember the preference, preserve the reason, and let the person correct it when life changes.
| Experience | What you can do |
|---|---|
| Web chat | Start a real DeepSeek conversation in the browser, without email signup or a wallet. |
| Memory, by choice | Opt in before Anghkooey saves lasting preferences to Walrus Mainnet. Chat remains usable with memory saving off. |
| Personalized recall | Receive answers informed by relevant, previously saved Walrus memories, with recall receipts when available. |
| Memory library | Browse confirmed memory metadata, filter by category/status, and search for matching stored facts. |
| Corrections | Replace an outdated preference with a new confirmed Walrus memory; the old record is retired from recall, not deleted from Mainnet. |
| Linked conversations | Connect a browser identity with Telegram or an iMessage chat using a single-use code and verified in-channel approval when accounts need consolidating. |
| Privacy controls | Change memory consent and end a browser session, with clear information about what each action does not erase. |
Channel availability: web chat and the Telegram bot are the public entry points. iMessage is integrated through Photon but remains in testing; no public contact is advertised here.
Hackathon addition (October 2026): TasteProof connects Anghkooey's memory-aware concierge to Qloo's cultural-intelligence API. The rest of Anghkooey — DeepSeek chat, Walrus memories, Neon identity, Photon messaging — is the pre-existing product; Qloo is the new taste layer.
Problem: travel assistants forget why you liked a place, and generic "best restaurants" lists ignore your taste. Solution: Anghkooey resolves named cultural anchors you approve (e.g. Nobu Restaurant) through live Qloo Search, confirms each exact entity, then runs Qloo Insights for the destination city — grounding recommendations ONLY in the venues Qloo actually returns, with photos, tags, affinity, and explicit correction/Undo plus a live single-versus-multi comparison.
Multi-anchor proof (live, production): confirm Nobu Restaurant (FF6EE520) plus Ryuichi Sakamoto (B0DEDE63, provider-typed artist) in Lagos — one combined Insights request returns ILE EROS LAGOS, Izanagi Japanese Cuisine, and NOK by Alara with both anchors attributed on every venue, versus the single-anchor baseline (Izanagi, ILE EROS, Talindo). Text-panel evidence below is captured from the deployed app during release verification; venue photographs appear only in the previously approved card shots (credit: Qloo).
/chat): “Find dining like Nobu in Lagos.”/taste)The same live Qloo evidence rendered as inspectable photographic cards: venue photo, Qloo description, cultural tags, address, and Qloo affinity — explicitly labeled as Qloo's ranking signal, never a match percentage.
Change the anchor and TasteProof reruns Qloo, showing a real before/after comparison (added/removed/reordered by actual Qloo IDs) with an Undo that restores the prior result without another lookup.
The layout is responsive — the same discovery on a phone:
Your saved Walrus memories can suggest a taste anchor (the memory panel mines capitalized names from your own words), but raw memory content, reasons, and identifiers are never transmitted to Qloo: Qloo receives the approved anchor/city inputs, resolves the anchor to a Qloo entity, and that Qloo-returned entity ID drives the Insights lookup. Separately, relevant recalled memories may be included in DeepSeek prompts to shape the recommendation text — that stays between our server and the chat model, never Qloo. Dining turns are session-only and never written as durable memories. The demonstration below works with memory saving OFF: “Nobu” is typed by hand, not recalled from a saved memory.
flowchart LR
U[User] --> CHAT[Web chat / /taste]
CHAT --> APP{Explicit approval?}
APP -- yes, anchor + city --> QLOO[Qloo Search + Insights\nserver-only, rate-limited]
APP -- no / missing details --> ASK[Clarify or stand down]
QLOO --> EV[Typed evidence:\nvenues, tags, affinity, photos]
EV --> DS[DeepSeek Flash\ngrounded answer only]
DS --> U
MEM[(Walrus memories)] -. suggest only .-> APP
Nobu Restaurant, Lagos).FF6EE520 entity. Real Qloo venues appear with photos and evidence.Terra Kulture, press Approve revised Qloo lookup, and watch the before/after comparison. Press Undo to restore.Ryuichi Sakamoto, Resolve anchors, confirm both entities, review the combined approval summary, press Approve combined discovery — expect the joint set with per-venue anchor attribution, then Compare with Nobu Restaurant alone and check What actually ran./chat: “Find dining like Nobu in Lagos” → say “Yes” → confirm the exact entity → grounded recommendation. (Memory panel use is optional; memory saving stays OFF — demo anchors are typed, not recalled.)Server-only Qloo adapter (Search + Insights with feature.explainability, trustworthy entity resolution, per-entity attribution, strict fail-closed rate limiting), /api/tasteproof (GET single-anchor + POST multi-anchor with fresh revalidation), the /taste page with photographic evidence cards + correction/Undo + multi-anchor combined discovery with single-versus-multi comparison, execution trace, and a recorded no-Qloo baseline, the chat approval gate with entity confirmation and full-message affirmative precision, Qloo-grounded DeepSeek prompting, and synthetic regression suites. Nothing else changed: no migrations, no new infrastructure, no Photon/Gmail/Walrus behavior changes.
npm audit --omit=dev: zero high/critical advisories (18 moderate Spectrum/OTel worker-telemetry advisories with no compatible fix).FF6EE520 + Izanagi / ILE EROS / Talindo; combined Nobu FF6EE520 + Sakamoto artist B0DEDE63 → ILE EROS / Izanagi / NOK by Alara with both anchors attributed per venue; all photos load with entity-matched URLs; empty/gibberish anchors return honest errors; stale selections rejected.Visual placeholders: Add your actual screenshots to
docs/media/before publishing a demo-focused README. These slots are deliberately labelled rather than displaying invented product screenshots or broken image links.
Demo video: [Add your public demo link here after publication].
Mainnet evidence: [Add a sanitized proof/evidence link here when available; do not expose user content].
For example:
You: “I avoid rooms facing busy roads because traffic noise keeps me awake.”
Later: “What should I prioritize when choosing a hotel?”
Anghkooey: Can use the confirmed preference and its reason to advise prioritizing quieter rooms, without pretending to know live availability.
This exchange is illustrative; it is not a quoted or fabricated production chat transcript.
Web, Telegram, and iMessage use the same conversation engine. Linking is not automatic: a web session generates a one-time, 10-minute code, which the user sends to Anghkooey inside the target messaging channel. Photon verifies the actual sender. If that channel already has a separate memory account, the person explicitly approves consolidation with MERGE YES (or declines with MERGE NO). Existing memories remain in their original Walrus namespaces and are recalled through authorized identity aliases.
Important: an anonymous browser session is not a recoverable email login. Clearing cookies, ending the session, or switching devices can prevent access to that specific web identity. Wallet connection is not required and does not confer individual custody over memories in the current architecture.
flowchart TB
U[User] --> W[Web app / Next.js]
U --> TG[Telegram]
U --> IM[iMessage - in testing]
TG --> P[Photon Spectrum Cloud]
IM --> P
P --> WK[Persistent Photon worker / AWS EC2]
W --> API[Authenticated web API]
API --> CORE[Shared conversation orchestrator]
WK --> CORE
CORE <--> DS[DeepSeek Flash]
CORE <--> DB[(Neon PostgreSQL / sessions, links, metadata)]
CORE <--> MW[MemWal SDK]
MW <--> WAL[(Walrus Memory Mainnet)]
Where things live:
@mysten-incubation/memwal. Neon is not a replacement long-term preference store.| Layer | Technology |
|---|---|
| App | Next.js 16, React 19, TypeScript |
| Styling and motion | Tailwind CSS 4, GSAP / ScrollTrigger, Cormorant Garamond, Satoshi, Georama |
| AI | DeepSeek Flash |
| Durable memory | Walrus Mainnet via MemWal SDK |
| Database | Neon PostgreSQL |
| Messaging | Photon Spectrum (spectrum-ts) for Telegram and iMessage |
| Hosting | Vercel (web) and AWS EC2 + systemd (worker) |
git clone https://github.com/Devendurance/anghkooey.git
cd anghkooey
npm ci
Clean npm ci with no extra flags is the expected state; peer ranges resolve without --legacy-peer-deps or --force. Don't run npm audit fix --force as a substitute.
# Copy the template only if .env does not already exist.
test -e .env || cp .env.example .env
Edit .env locally. Never commit it, paste credentials into issues, or expose keys through NEXT_PUBLIC_* variables.
| Setting | Purpose |
|---|---|
DEEPSEEK_API_KEY | DeepSeek API credential |
DEEPSEEK_BASE_URL | DeepSeek API base URL (template includes a default) |
DEEPSEEK_MODEL | deepseek-flash |
DEEPSEEK_THINKING | Optional; defaults to disabled for normal chat and extraction |
DATABASE_URL | Neon PostgreSQL connection string |
APP_SESSION_SECRET | Secret used to protect opaque session tokens; use a strong random value |
WEB_BASE_URL | Local URL in development; public HTTPS origin in production |
MEMWAL_PRIVATE_KEY | Server-only MemWal private credential |
MEMWAL_ACCOUNT_ID | Application-managed MemWal account identifier |
MEMWAL_SERVER_URL | Mainnet relayer URL (template includes a default) |
PHOTON_PROJECT_ID | Photon project identifier, for the worker |
PHOTON_PROJECT_SECRET | Photon server credential, for the worker |
TELEGRAM_BOT_TOKEN | Telegram bot credential, for the worker |
QLOO_API_KEY | Qloo hackathon API credential (server-only; required for TasteProof) |
QLOO_BASE_URL | Qloo API base URL (optional; defaults to the hackathon endpoint) |
The repository's .env.example is the canonical variable-name reference.
# Apply the existing migrations to your intended database only.
npm run migrate
npm run dev
Open http://localhost:3000. The web chat is at /chat; the memory archive is at /memories.
Do not run migrations against a live database casually. The deployed project uses an existing migrated Neon database. Use a separate development database when experimenting.
npm run photon:readiness
npm run worker:start
Only one Photon worker instance should listen to a given project at a time. If the AWS production worker is running, do not start a second local worker with the same Photon credentials; competing workers can duplicate deliveries and replies. See the Photon deployment guide.
npm test
npm run typecheck
npm run lint
npm run build
npm run check:integrations
Some integration tests require database access. Real-Neon suites skip honestly
when DATABASE_URL is empty (clean-checkout default); set an isolated QA
branch URL explicitly to run them — never point them at production.
photon:readiness is the dedicated Photon check; the generic integration
checker may contain legacy Photon status wording. Scripts such as
smoke:memory and test-channel-flow can perform real, chargeable Mainnet
writes — run them deliberately, not as routine build checks.
# DB-less intercepted browser suite (no secrets, no prod writes).
# Builds, starts a local QA server on 127.0.0.1:3101, runs 14 Chromium
# checks (desktop + mobile, live-Qloo test excluded), then stops the server.
npm run test:e2e:intercepted
src/app/ Next.js pages and HTTP routes
src/components/ Landing, brand, and app experiences
src/server/ Sessions, identity, DeepSeek, Walrus, orchestration
src/lib/ Shared site configuration and client helpers
workers/photon-worker.ts Long-running Telegram/iMessage consumer
db/migrations/ PostgreSQL schema and migration history
scripts/ Readiness, verification, and migration utilities
tests/ Automated regression and integration tests
docs/ PRD, TRD, architecture, deployment guides
public/brand/anghkooey/ Branding and production artwork
Do not publish other users' memory contents, private IDs, or unredacted receipts in demos or issues without their permission.
The production architecture uses separate hosts for web and messaging:
WEB_BASE_URL with your public HTTPS domain, and verify /api/health plus actual chat behavior. Disable deployment protection for the public production domain before inviting users or judges.The web app being built successfully does not by itself prove the messaging worker is running. Conversely, worker readiness is not a substitute for a live Telegram/iMessage test.
| Document | What it covers |
|---|---|
| Product requirements | User journeys, intended experience, acceptance criteria |
| Technical requirements | Architecture contracts, security, memory semantics |
| System architecture | Data flows and trust boundaries |
| Brand messaging | Positioning, UX language, responsible claims |
| Design system | Typography, palette, motion, visual patterns |
| Web deployment | Vercel and API configuration |
| Photon deployment | Worker hosting and secure channel linking |
| Backend status | Implementation notes and verified backend milestones |
The original software source code in this repository is made available under the MIT License — see the license text for terms and warranty disclaimer.
Brand marks, the Anghkooey name, original artwork, ribbon imagery, screenshot/video material, and bundled fonts are not granted a separate reuse license merely by the software's MIT license. Their use or redistribution depends on ownership and the terms of their respective rights holders. Third-party libraries retain their own licenses. If you fork the code, use your own branding unless you have permission to use these assets.
Anghkooey · Remember the preference. Preserve the reason.
Built by Devendurance · © 2026