{"id":49394855,"url":"https://github.com/pixel-point/animate-text","last_synced_at":"2026-04-28T15:03:46.896Z","repository":{"id":353321037,"uuid":"1218828452","full_name":"pixel-point/animate-text","owner":"pixel-point","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-23T12:14:05.000Z","size":2126,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-23T12:26:31.852Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://animate-text-orcin.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pixel-point.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-23T08:55:09.000Z","updated_at":"2026-04-23T12:14:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pixel-point/animate-text","commit_stats":null,"previous_names":["pixel-point/animate-text"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/pixel-point/animate-text","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel-point%2Fanimate-text","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel-point%2Fanimate-text/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel-point%2Fanimate-text/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel-point%2Fanimate-text/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pixel-point","download_url":"https://codeload.github.com/pixel-point/animate-text/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel-point%2Fanimate-text/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32385943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T14:34:11.604Z","status":"ssl_error","status_checked_at":"2026-04-28T14:32:37.009Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-28T15:03:28.555Z","updated_at":"2026-04-28T15:03:46.889Z","avatar_url":"https://github.com/pixel-point.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project Guide\n\nThis document explains how to run, build, and maintain the project locally.\n\n## Technology Stack\n\n- [Next.js](https://nextjs.org/) - application framework and routing\n- [Tailwind CSS](https://tailwindcss.com/) - utility-first styling\n- [shadcn/ui](https://ui.shadcn.com/) - reusable UI component patterns built on Radix primitives\n\n## Requirements\n\n- Node.js 20+\n- pnpm 10+\n\n## Getting Started\n\nRun all commands from the project root (this folder):\n\n```bash\npnpm install\npnpm dev\n```\n\nThe app will be available at `http://localhost:3000`.\n\nIf environment variables are required for a specific setup:\n\n```bash\ncp .env.example .env\n```\n\n## Development Workflow\n\n1. Start the dev server with `pnpm dev`.\n2. Regenerate the skill and app data when changing the animation catalog:\n   - `pnpm generate:animate-text-skill`\n   - `pnpm validate:animate-text-catalog`\n3. Add or update routes in `src/app`.\n4. Build reusable UI in `src/components/ui`.\n5. Build page-specific sections in `src/components/pages/\u003cslug\u003e`\n6. Compose pages from those sections inside route files under `src/app`.\n7. Run quality checks before committing:\n   - `pnpm lint`\n   - `pnpm format`\n   - `pnpm typecheck` (`tsgo --noEmit`)\n   - `pnpm build`\n\n## Available Scripts\n\n- `pnpm dev` - start Next.js in development mode\n- `pnpm generate:animate-text-skill` - rebuild the installable skill and generated site data from `catalog/text-animations`\n- `pnpm validate:animate-text-catalog` - validate canonical catalog inputs and ensure generated outputs are up to date\n- `pnpm test:animate-text-skill` - smoke test the generated public skill helper scripts\n- `pnpm build` - create a production build\n- `pnpm start` - run the production server\n- `pnpm lint` - run OXC lint checks\n- `pnpm lint:fix` - run OXC lint with auto-fixes\n- `pnpm format` - check formatting with Oxfmt\n- `pnpm format:fix` - format files with Oxfmt\n- `pnpm typecheck` - run TypeScript type checks with tsgo\n\n## Project Structure\n\n```text\n.\n├─ public/                    # static assets served as-is\n├─ catalog/                   # canonical source-of-truth data for the text animation library\n├─ skills/                    # installable generated skill output\n├─ templates/                 # templates used to generate skill documents\n├─ src/\n│  ├─ app/                    # Next.js App Router (routes, layouts, not-found)\n│  ├─ components/\n│  │  ├─ ui/                  # shared UI primitives\n│  │  └─ pages/\n│  │     ├─ home/             # components used only by the Home page\n│  │     └─ \u003cslug\u003e/           # components used only by one specific page\n│  ├─ content/                # markdown content grouped by feature/page\n│  ├─ configs/                # app and website configuration\n│  ├─ constants/              # static constants\n│  ├─ contexts/               # React providers/contexts\n│  ├─ hooks/                  # reusable React hooks\n│  ├─ lib/                    # utilities and framework helpers\n│  ├─ styles/                 # global and feature styles\n│  └─ types/                  # shared TypeScript types\n├─ scripts/                   # repo-maintainer scripts including catalog generation/validation\n├─ next.config.ts             # Next.js configuration\n├─ postcss.config.mjs         # PostCSS configuration\n├─ tailwind.plugins.mjs       # Tailwind plugin setup\n├─ .oxlintrc.json             # OXC lint configuration\n├─ .oxfmtrc.json              # OXC formatter configuration\n└─ package.json\n```\n\n## Website Config\n\nWebsite-level settings are defined in `src/configs/website-config.ts`.\n\nUse this config for branding, metadata defaults, and repository links. Common fields:\n\n- `projectName` - project name used in UI and metadata\n- `metaThemeColors.light` / `metaThemeColors.dark` - browser theme colors\n- `src/app/opengraph-image.tsx` - generated OG/social preview image used for Open Graph and Twitter\n- `githubOrg` / `githubRepo` - repository metadata for links/integrations\n\nExample:\n\n```ts\nconst config = {\n  projectName: '\u003cYOUR_PROJECT_NAME\u003e',\n  metaThemeColors: {\n    light: '#ffffff',\n    dark: '#09090b',\n  },\n};\n```\n\n## Content Directory\n\nContent lives in `src/content` and is organized by folders per section/page type.\n\nExample structure:\n\n```text\nsrc/content/\n├─ blog/\n├─ docs/\n└─ legal/\n```\n\nRules for this project:\n\n- Use Markdown only (`.md` files).\n- Keep content grouped by folder (for example: `docs/`, `blog/`, `legal/`).\n- Use nested folders when you need hierarchy inside a section.\n\n### Documentation (`/docs`) Conventions\n\nFor the `/docs` section, this project follows the same page conventions as FumaDocs. Use the official [FumaDocs page conventions](https://www.fumadocs.dev/docs/page-conventions) as the primary reference when creating or editing docs pages.\n\n## Build and Output\n\n- Run `pnpm build` to generate the production build in `.next/`.\n- Run `pnpm start` to serve the compiled build.\n- `postbuild` can generate sitemap files and `robots.txt` via `next-sitemap`.\n- Generated/runtime directories such as `.next/`, `.turbo/`, and `node_modules/` are not source files.\n\n## Animate Text Skill\n\nThis repository now contains two downstream outputs generated from `catalog/text-animations/`:\n\n- `skills/animate-text/` - the installable public skill for the `skills.sh` ecosystem\n- `src/data/text-animations/generated/` - app-facing generated modules used by the website\n\nCanonical editing rules:\n\n- edit `catalog/text-animations/**` by hand\n- do not hand-edit `skills/animate-text/**`\n- do not hand-edit `src/data/text-animations/generated/**`\n\nTypical maintainer flow:\n\n```bash\npnpm generate:animate-text-skill\npnpm validate:animate-text-catalog\npnpm test:animate-text-skill\n```\n\nInstall form for consumers:\n\n```bash\nnpx skills add \u003cowner\u003e/\u003crepo\u003e --skill animate-text\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixel-point%2Fanimate-text","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpixel-point%2Fanimate-text","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixel-point%2Fanimate-text/lists"}