Skip to content

XiaokunDuan/snapshot_source

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Novory

Novory icon

Novory is an image-first language learning product. It turns a photo into a useful study unit: concept extraction, multilingual cards, learning history, and a native iOS/iPadOS workflow backed by a web API.

Live App · Why · Preview · Quickstart · Release Readiness · Roadmap

Next.js 16 React 19 TypeScript Clerk Neon Postgres Cloudflare R2 Gemini

Why Novory

Most language tools start with text.

Novory starts where memory is usually stronger: an image from real life. You take or upload a photo, the system detects the core concept, expands it into learning material, and saves the result into a study flow that can be revisited later.

This makes the product useful in ordinary moments:

  • turn a street photo, menu, package, or object into a vocabulary entry
  • build multilingual cards without manually assembling prompts
  • keep history, streaks, and usage state in one place
  • support both fast capture and richer follow-up enrichment

Product Preview

Novory learning screen

What It Does

  • Extracts a core object or concept from an image
  • Generates multilingual study content for the detected concept
  • Saves results into language-specific libraries and history
  • Tracks usage, streaks, and subscription state
  • Supports a native iOS/iPadOS client while the existing web stack is still being decomposed

Demo

  • Live app: https://www.yulu34.top
  • Main analyze flow: upload or capture an image, then review the generated learning card
  • Typical output: concept, translations, study history, and library entries by target language

Release Readiness

iOS CLI Config

The iOS target now reads release-facing values from ios/App/Config/*.xcconfig.

  • Shared defaults: ios/App/Config/App.shared.xcconfig
  • Debug overrides: ios/App/Config/App.debug.xcconfig
  • Release overrides: ios/App/Config/App.release.xcconfig

The fastest local CLI edits are now:

  • PRODUCT_BUNDLE_IDENTIFIER
  • SNAPSHOT_API_BASE_URL
  • SNAPSHOT_STOREKIT_PRODUCT_ID_MONTHLY
  • SNAPSHOT_STOREKIT_PRODUCT_ID_YEARLY
  • SNAPSHOT_STOREKIT_PRIMARY_PRODUCT_ID
  • SNAPSHOT_STOREKIT_SUBSCRIPTION_GROUP_ID
  • Release-oriented environment template: env.example

Architecture

Frontend

  • Next.js 16 App Router for legacy web surfaces and API routes
  • React 19
  • Tailwind CSS 4
  • Legacy web auth flows
  • Framer Motion
  • Native iOS shell under ios/

Backend

  • App Router API routes
  • Neon Postgres
  • Cloudflare R2
  • Stripe subscriptions and webhooks for the web side, plus App Store billing foundations
  • Sentry monitoring
  • Resend transactional email hooks

AI Pipeline

  • Gemini handles image understanding and fast concept extraction
  • A text-generation endpoint enriches the result into fuller multilingual study content
  • The workflow splits into a fast analyze path and a richer asynchronous enrichment path

Repository Layout

app/                    Legacy App Router pages and APIs pending native migration
components/             UI primitives and product surfaces
hooks/                  Client hooks
lib/                    services, billing, analytics, AI helpers, data access
public/                 logos, preview assets, service worker
scripts/                database setup and migration scripts
tests/                  Vitest coverage for billing, routes, validation
ios/                    Native iOS shell in transition

Quickstart

1. Install

npm install

2. Create local environment

cp env.example .env.local

3. Configure required variables

Fill values in env.example.

4. Initialize the database

npm run db:setup

5. Start development

npm run dev

Open http://localhost:3000.

Key Environment Variables

Core AI

GEMINI_API_KEY_POOL=
GEMINI_MODEL=gemini-2.5-flash-lite
TEXT_API_BASE_URL=
TEXT_API_KEY=
TEXT_MODEL=

Storage and Database

R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET_NAME=word-app-images
DATABASE_URL=
CDN_PUBLIC_BASE_URL=

Auth and App URLs

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
NEXT_PUBLIC_APP_URL=https://www.yulu34.top
CAP_SERVER_URL=https://www.yulu34.top

Release and Support

NEXT_PUBLIC_SUPPORT_EMAIL=support@example.com
NEXT_PUBLIC_PRIVACY_POLICY_URL=https://example.com/privacy
NEXT_PUBLIC_TERMS_URL=https://example.com/terms
NEXT_PUBLIC_APP_STORE_URL=https://apps.apple.com/app/id0000000000

Billing and Monitoring

NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
STRIPE_SECRET_KEY=
STRIPE_PRICE_ID=
STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_SENTRY_DSN=
SENTRY_DSN=
RESEND_API_KEY=
RESEND_FROM_EMAIL=

Commands

npm run dev
npm run build
npm run start
npm run lint
npm run test
npm run db:setup
npm run db:migrate

Quality Gates

Recommended checks before shipping:

npm run lint
npx tsc --noEmit
npm run test
npm run build

Deployment

Novory is deployed on Vercel for the web backend and distributed through Apple platforms for the native client.

  1. Import the repository into Vercel.
  2. Add the same environment variables used locally.
  3. Point the production domain to the Vercel project.
  4. Run npm run db:setup against the target database.
  5. Push to main for production deployment.
  6. For Apple release work, follow the checklist in docs/app-store-prep.md.

Roadmap

  • Improve the first-run onboarding flow for new learners
  • Add clearer card review loops after image analysis
  • Expand language support and enrichment quality controls
  • Tighten mobile capture and install flows
  • Publish more public product documentation and changelog notes

About

Image-first language learning app that turns photos into multilingual study cards and practice flows.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors