safeeyes
간단하고 아름다운 휴식 알림으로 눈 피로 보호
Solara는 치과 진료실을 위한 AI 프런트오피스 OS로 보험·전화·예약·접수·리콜·노트·분석을 하나로 통합한다
Solara is the AI front office operating system for dental practices. Insurance, calls, booking, intake, recall, notes, analytics — unified with OpenDental.
건강TypeScript · JavaScriptGitHub @projectsoftqube-a11y온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Marketing site for Solara, the AI front office for dental practices.
Built with Next.js 16 (App Router, Cache Components, Turbopack), React 19, Tailwind CSS v4 and Motion.
npm install
npm run dev # http://localhost:3000
| Script | What it does |
|---|---|
npm run dev | Development server |
npm run build | Production build (prerenders every route) |
npm run start | Serve the production build |
npm run check | Typecheck, lint and Prettier check in one go |
npm run format | Format the whole repo with Prettier |
npm run email:test | Send the callback emails using your .env SMTP |
npm run seo:audit | Verify SEO on a running build (see below) |
src/
app/ Routes (page.tsx = route, metadata lives here)
components/
pages/ Client-side page bodies for interactive routes
sections/ Home page sections
layouts/ Shared layouts (legal pages)
lib/
callback.ts Server Action behind both callback forms
email/ SMTP transport + email templates (server-only)
site.ts Site URL, default copy and public endpoints
public/ Images, videos and the brochure PDF
scripts/ One-off developer scripts
Every public page is registered in src/lib/seo/pages.ts. That registry
generates sitemap.xml, llms.txt, llms-full.txt, each page's metadata
(title, description, canonical, Open Graph) and its 1200×630 Open Graph image
(/og/[slug]). To add a page: add its content, register it there, and use
pageMetadata(getPage(path)) in the route.
src/content/: features, comparison, FAQs, pricing
plans, navigation and the verified US state data (data/states.json, with a
source URL per fact). Pages and JSON-LD render from the same objects, so the
FAQ schema always matches the visible text.src/lib/seo/schema.ts): one @graph per page. The
Organization, WebSite and SoftwareApplication nodes are emitted by the root
layout and referenced by @id everywhere else. Never add ratings, reviews or
other properties without real data.npm run build && npm run start, then npm run seo:audit
checks every sitemap URL for status, title and description length and
uniqueness, canonical, Open Graph, one H1 and heading order, JSON-LD validity
and @id resolution, FAQ schema/text parity, internal links and OG images.Create a .env file (never committed). Only SMTP is required for the forms to
actually send email; without it, submissions still succeed and the server logs
that sending was skipped.
| Variable | Purpose |
|---|---|
SMTP_HOST, SMTP_PORT | SMTP server, e.g. smtp.gmail.com / 587 |
SMTP_USER, SMTP_PASS | SMTP login (a Google App Password for Gmail) |
SMTP_SECURE | Optional. true for port 465; inferred from the port otherwise |
SMTP_FROM | Optional. Visible From address |
EMAIL_ADMIN | Where callback notifications go (default [email protected]) |
SITE_URL | Public origin used in email links and the email logo |
EMAIL_LOGO_URL | Optional email logo override (PNG/JPG) |
NEXT_PUBLIC_API_BASE_URL | Optional. Chatbot / voice-bot backend (defaults to production) |
NEXT_PUBLIC_LIVEKIT_URL | Optional. LiveKit server for the voice bot (defaults to production) |
NEXT_PUBLIC_* values are inlined at build time, so redeploy after changing them.
Deployed on Vercel. vercel.json pins the framework preset to Next.js.