{"id":29201835,"url":"https://github.com/geekskai/aimorpher","last_synced_at":"2025-07-02T12:07:27.041Z","repository":{"id":301860008,"uuid":"1010501943","full_name":"geekskai/aimorpher","owner":"geekskai","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-29T08:58:51.000Z","size":1664,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-29T09:19:24.284Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://aimorpher.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geekskai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2025-06-29T07:52:30.000Z","updated_at":"2025-06-29T08:58:54.000Z","dependencies_parsed_at":"2025-06-29T09:30:53.232Z","dependency_job_id":null,"html_url":"https://github.com/geekskai/aimorpher","commit_stats":null,"previous_names":["geekskai/aimorpher"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/geekskai/aimorpher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekskai%2Faimorpher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekskai%2Faimorpher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekskai%2Faimorpher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekskai%2Faimorpher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geekskai","download_url":"https://codeload.github.com/geekskai/aimorpher/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekskai%2Faimorpher/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263137419,"owners_count":23419298,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2025-07-02T12:07:26.156Z","updated_at":"2025-07-02T12:07:27.019Z","avatar_url":"https://github.com/geekskai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://www.aimorpher.com\"\u003e\n  \u003cimg alt=\"aimorpher.com\" src=\"./public/og.png\"\u003e\n  \u003ch1 align=\"center\"\u003eaimorpher.com\u003c/h1\u003e\n\u003c/a\u003e\n\n\u003cp align=\"center\"\u003e\n  Turn your resume into a professional website in seconds. Powered by Together.ai \u0026 Llama 3.3.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#english\"\u003eEnglish\u003c/a\u003e | \u003ca href=\"#chinese\"\u003e中文\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## English\n\n### 🚀 Features\n\n- **One-Click Conversion**: Upload your LinkedIn PDF or resume and get a professional website instantly\n- **AI-Powered**: Uses Together.ai's Llama 3.3 for intelligent content extraction\n- **Real-time Editing**: Edit your resume content with live preview\n- **Custom URLs**: Get your personalized URL (e.g., aimorpher.com/yourname)\n- **Responsive Design**: Looks great on all devices\n- **SEO Optimized**: Built-in SEO with Open Graph support\n- **100% Free \u0026 Open Source**: No hidden costs, fully open source\n\n### 🛠 Tech Stack\n\n- **AI/LLM**: Together.ai with Llama 3.3 for content extraction\n- **Framework**: Next.js 14 with App Router\n- **Authentication**: Clerk for user management\n- **Database**: Upstash Redis for data storage\n- **File Storage**: Cloudflare R2 for PDF storage\n- **Styling**: Tailwind CSS + shadcn/ui components\n- **Deployment**: Vercel for hosting\n- **Analytics**: Plausible (optional)\n\n### 🎯 How It Works\n\n1. **Sign Up**: Create an account with Clerk authentication\n2. **Upload**: Upload your LinkedIn PDF or resume (supports PDF format only)\n3. **AI Processing**: Llama 3.3 extracts and structures your information\n4. **Customize**: Edit and customize your content with real-time preview\n5. **Publish**: Get your personalized website URL and share it with the world\n\n### 🚀 Quick Start\n\n#### Prerequisites\n\n- Node.js 18+ and pnpm\n- Together.ai account for AI processing\n- Upstash Redis database\n- Cloudflare R2 bucket for file storage\n- Clerk account for authentication\n\n#### Installation\n\n1. **Clone the repository**\n\n   ```bash\n   git clone https://github.com/geekskai/aimorpher.git\n   cd aimorpher\n   ```\n\n2. **Install dependencies**\n\n   ```bash\n   pnpm install\n   ```\n\n3. **Set up environment variables**\n\n   ```bash\n   cp .env.example .env.local\n   ```\n\n   Fill in your API keys:\n\n   ```env\n   # Together.ai\n   TOGETHER_API_KEY=your_together_api_key\n\n   # Upstash Redis\n   UPSTASH_REDIS_REST_URL=your_redis_url\n   UPSTASH_REDIS_REST_TOKEN=your_redis_token\n\n   # Cloudflare R2\n   R2_ACCOUNT_ID=your_r2_account_id\n   R2_ACCESS_KEY_ID=your_r2_access_key\n   R2_SECRET_ACCESS_KEY=your_r2_secret_key\n   R2_BUCKET_NAME=your_bucket_name\n   R2_ENDPOINT=your_r2_endpoint\n\n   # Clerk Authentication\n   NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key\n   CLERK_SECRET_KEY=your_clerk_secret_key\n   ```\n\n4. **Run the development server**\n\n   ```bash\n   pnpm dev\n   ```\n\n5. **Open your browser**\n   Navigate to `http://localhost:3000`\n\n### 📁 Project Structure\n\n## Tech stack\n\n- Together.ai for the LLM\n- Vercel's AI SDK as the LLM framework\n- Clerk for authentication\n- Next.js app router\n- Helicone for observability\n- Cloudflare R2 for object storage (PDFs)\n- Upstash redis for my DB\n- Vercel for hosting\n\n## How it works\n\n1. Create an account on the site with Clerk\n2. Upload a PDF which gets uploaded to R2 and does a safety check with Llama Guard\n3. Send the PDF as context to Qwen 2.5 72B to extract out relevant information with structured outputs (JSON mode)\n4. Get all the information \u0026 put it on a dynamic route for the user to be able to view \u0026 publish their site\n\n## Cloning \u0026 running\n\n1. Fork or clone the repo\n2. Create an account at [Together AI](https://togetherai.link) for the LLM\n3. Create an account at [Upstash](https://upstash.com/) for the Redis DB\n4. Create an account at [Cloudflare](https://cloudflare.com/) for the R2 bucket\n5. Create a `.env` (use the `.example.env` for reference) and replace the API keys\n6. Run `pnpm install` and `pnpm run dev` to install dependencies and run locally\n\n## Future tasks\n\n- [ ] Change llama 3.3 to Qwen 2.5 on the app\n- [ ] Add Helicone for observability\n- [ ] add error logging to make sure to fix any bugs\n- [ ] add ability to get to the \"preview\" page if you have a site already\n- [ ] ability to edit links in the site\n- [ ] ability to edit any section in the site\n- [ ] add themes that you can toggle on (start with ghibli)\n- [ ] Delete previously uploaded resume when we upload a new one\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekskai%2Faimorpher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeekskai%2Faimorpher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekskai%2Faimorpher/lists"}