Back to Discover

logr

connector

koshikraj

Query any public logr profile — timelines, events, full context — plus owner-authorized writes.

View on GitHub
0 starsSynced Aug 7, 2026

Install to Claude Code

/plugin marketplace add koshikraj/logr

README

logr

A personal portfolio + AI context layer. Most people have a LinkedIn. Nobody has a structured, machine-readable, queryable version of their story that works with any AI tool. logr fills that gap — an editorial life-log that is beautiful for humans to read and structured for AI to query.

You log your story once. It becomes three things:

  • a timeline at logr.it/you — year-grouped, hover-to-expand, in your choice of 9 palettes × 8 layouts,
  • machine-readable Markdown context any AI agent can ingest — the real moat, and
  • a grounded AI chat widget where visitors ask questions answered strictly from your log.

See ROADMAP.md for what's built and what's next.

Features

  • Multi-user — sign in with Google, claim a handle at /welcome, edit at /dashboard with a live preview.
  • AI import — paste your story, upload a resume (PDF/DOCX), or point at a URL; AI structures it into timeline events you review and confirm before anything is saved.
  • Grounded chat — the visitor chat is prompted with the same complete Markdown context as the public routes, streams via OpenRouter, and is rate-limited. Facts-only: if it's not in your log, it says so.
  • Theming — 9 palettes (incl. dark ink) × 8 layouts (timeline, journal, magazine, terminal, feed, card, centered, polaroid), persisted per profile, previewable live.
  • Pinned events — pin up to 7 events from the dashboard events tab (pins dialog); they replace the "recent" side rail (and the OG image's rail) and are marked in the Markdown context.
  • Media — image upload (S3, or local FS in dev), video/tweet embeds, unfurled link cards, dynamic OG image per profile.

Chat, S3, and Google auth are each feature-gated on their env vars and degrade gracefully when unset.

Routes

RouteWhat
/Marketing landing
/[username]Public timeline (e.g. /koshik)
/[username]/askDedicated, shareable grounded-chat page
/[username]/llms.txtPrimary Markdown context; full unless the profile is oversized
/[username]/llms-full.txtComplete, unabridged Markdown context
/[username].mdClean Markdown counterpart to the public profile
/[username]/llm.txtLegacy-compatible complete context URL
/mcpGlobal MCP server (Streamable HTTP) — agents query any public profile; OAuth-authorized owner writes
/oauth/authorizeOAuth 2.1 consent screen for MCP write access (+ /api/oauth/token, /api/oauth/register, /.well-known/* discovery)
/api/[username]/chatStreaming grounded chat API
/dashboardOwner editor (auth-gated) — profile · events · appearance · import
/welcomeOnboarding — claim a handle, seed your timeline
/loginGoogle sign-in

Tech stack

Next.js 16 (App Router) · React 19 · TypeScript · Postgres (Supabase) + Prisma 6 · Auth.js (NextAuth v5, Google OAuth) · Vercel AI SDK via OpenRouter · AWS S3 (local FS in dev) · Tailwind v4 + scoped CSS driven by theme tokens · Source Serif 4 + JetBrains Mono · Vercel.

Running locally

npm install
cp .env.example .env     # fill in the values below
npx prisma migrate dev   # applies migrations to your Postgres
npm run db:seed          # loads a demo profile + ~18 events
npm run dev              # http://localhost:3000

.env (see .env.example for details):

  • DATABASE_URL / DIRECT_URL — Supabase Postgres; transaction pooler (:6543, ?pgbouncer=true) for runtime, session (:5432) for prisma migrate.
  • AUTH_SECRET + AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRET — Google sign-in for /dashboard and onboarding.
  • OPENROUTER_API_KEY — optional; enables the visitor chat + AI import (OPENROUTER_MODEL to override the default model).
  • AWS_* — optional; S3 image storage (falls back to ./public/uploads).

Project structure

design/                     # design handoff — visual source of truth (not shipped)
prisma/
  schema.prisma             # Profile, User/Account/Session, Event, Media, ChatMessage
  seed.ts                   # demo profile + events
src/
  auth.ts                   # NextAuth (Google + Prisma adapter)
  app/
    page.tsx                    # marketing landing
    [username]/page.tsx         # public timeline (SSR)
    [username]/llms.txt/route.ts # primary machine-readable context
    [username]/opengraph-image.tsx
    dashboard/page.tsx          # owner editor (auth-gated)
    welcome/page.tsx            # onboarding / handle claim
    api/[username]/chat/route.ts# streaming grounded chat
    api/upload/route.ts         # image upload
  components/
    Portfolio.tsx, ChatWidget.tsx, ShareModal.tsx, ...
    admin/                      # dashboard: forms, theme editor, events, import dialogs
    onboarding/, marketing/, ui/
  lib/
    actions.ts                  # all server actions
    chat.ts, narrate.ts, import.ts, llmtxt.ts, profile.ts, theme.ts, storage.ts, ...

JSON-shaped fields (socials, theme, event link) are stored as serialized strings so the schema stays portable. Outbound fetches of user-supplied URLs go through the SSRF-guarded client in lib/import.ts.

Domain

Product domain logr.it; portfolios at logr.it/<handle>. Primary agent context lives at logr.it/<handle>/llms.txt, with complete Markdown at logr.it/<handle>/llms-full.txt and logr.it/<handle>.md.

Rendered live from koshikraj/logr's GitHub README — not stored, always reflects the source repo.

1 Install Method

NameDescriptionCategorySource
streamable-http remoteHosted streamable-http endpointmcp-serverhttps://logr.it/mcp

0 Comments

Login required
Log in to post a comment or update on this repo.

No comments yet — be the first to share an update.