{"id":50763348,"url":"https://github.com/aadhar41/portfolio","last_synced_at":"2026-06-11T12:03:56.897Z","repository":{"id":341149459,"uuid":"1169092622","full_name":"aadhar41/portfolio","owner":"aadhar41","description":"A full-stack personal portfolio built with a Laravel 12 REST API backend and a React + Vite frontend, designed to match the aadhar-portfolio HTML reference design.","archived":false,"fork":false,"pushed_at":"2026-03-14T12:22:18.000Z","size":79518,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-14T17:51:45.328Z","etag":null,"topics":["axios","css3","font-awesome","git","github","html5","intervention-image","laravel","laravel-sanctum","laravel-telescope","nodejs","npm","phpunit","react-helmet-async","react-router-dom","reactjs","redis","vite"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/aadhar41.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":null,"dco":null,"cla":null}},"created_at":"2026-02-28T06:54:19.000Z","updated_at":"2026-03-14T11:31:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aadhar41/portfolio","commit_stats":null,"previous_names":["aadhar41/portfolio"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/aadhar41/portfolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aadhar41%2Fportfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aadhar41%2Fportfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aadhar41%2Fportfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aadhar41%2Fportfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aadhar41","download_url":"https://codeload.github.com/aadhar41/portfolio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aadhar41%2Fportfolio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34197400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["axios","css3","font-awesome","git","github","html5","intervention-image","laravel","laravel-sanctum","laravel-telescope","nodejs","npm","phpunit","react-helmet-async","react-router-dom","reactjs","redis","vite"],"created_at":"2026-06-11T12:03:55.811Z","updated_at":"2026-06-11T12:03:56.892Z","avatar_url":"https://github.com/aadhar41.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portfolio — Full Stack Application\n\nA full-stack personal portfolio built with a **Laravel 12 REST API** backend and a **React + Vite** frontend, designed to match the [aadhar-portfolio](https://github.com/aadhar41/portfolio.git) HTML reference design.\n\n---\n\n## Screenshots\n\n### Public Frontend\n\n| Page | Preview |\n| --- | --- |\n| **Home** | ![Home Page](portfolio-frontend/public/img/screens/portfolio-home.png) |\n| **About** | ![About Page](portfolio-frontend/public/img/screens/portfolio-about-2026-03-05-19_08_09.png) |\n| **Projects** | ![Projects Page](portfolio-frontend/public/img/screens/portfolio-projects-2026-03-05-19_08_28.png) |\n| **Project Detail** | ![Project Detail](portfolio-frontend/public/img/screens/portfolio-projects-48-2026-03-05-19_08_57.png) |\n| **Blog** | ![Blog Page](portfolio-frontend/public/img/screens/portfolio-blog-2026-03-05-19_09_10.png) |\n| **Blog Detail** | ![Blog Detail](portfolio-frontend/public/img/screens/portfolio-blog-php-security-best-practices-2025-2026-03-05-19_09_23.png) |\n| **Contact** | ![Contact Page](portfolio-frontend/public/img/screens/portfolio-contact-2026-03-05-19_09_34.png) |\n\n### Admin Dashboard (Sanctum Protected)\n\n| Feature | Preview |\n| --- | --- |\n| **Login** | ![Admin Login](portfolio-frontend/public/img/screens/admin-login-2026-03-05-16_30_04.png) |\n| **Dashboard** | ![Admin Dashboard](portfolio-frontend/public/img/screens/admin-2026-03-05-16_30_21.png) |\n| **Project Management** | ![Project Management](portfolio-frontend/public/img/screens/admin-projects-2026-03-05-16_30_30.png) |\n| **Blog Management** | ![Blog Management](portfolio-frontend/public/img/screens/admin-blog-2026-03-05-16_32_07.png) |\n| **Skills Management** | ![Skills Management](portfolio-frontend/public/img/screens/admin-skills-2026-03-05-16_33_29.png) |\n| **Profile Management** | ![Profile Management](portfolio-frontend/public/img/screens/admin-profile-2026-03-05-16_33_39.png) |\n| **Contact Management** | *(Collapsible card layout with message previews)* |\n\n---\n\n## Project Structure\n\n```text\nportfolio/\n├── portfolio-backend/      # Laravel 12 REST API\n├── portfolio-frontend/     # React + Vite SPA\n├── documentation/          # Project documentation\n├── .github/                # GitHub community files \u0026 templates\n├── .gitignore\n└── README.md\n```\n\n---\n\n## Tech Stack\n\n### Backend (`portfolio-backend`)\n\n| Layer | Technology |\n| --- | --- |\n| Framework | Laravel 12 |\n| Language | PHP 8.2+ |\n| Auth | Laravel Sanctum |\n| Image Processing | Intervention Image 3 |\n| Cache / Queue | Redis (Predis) |\n| Testing | PHPUnit 11 |\n| Dev Tools | Laravel Telescope, Pail, Pint, Sail |\n\n### Frontend (`portfolio-frontend`)\n\n| Layer | Technology |\n| --- | --- |\n| Framework | React 19 + Vite 7 |\n| Routing | React Router DOM v7 |\n| HTTP Client | Axios |\n| Styling | Tailwind CSS (Modern, mobile-first design) |\n| Icons | Font Awesome 6 |\n| Fonts | Inter \u0026 Poppins (Google Fonts) |\n| SEO | react-helmet-async |\n\n---\n\n## Frontend Pages\n\n| Route | Page | Description |\n| --- | --- | --- |\n| `/` | Home | Full single-page portfolio with all sections (see Navigation below) |\n| `/about` | About | Bio, skill icon grid, alternating two-column experience \u0026 education timeline |\n| `/projects` | Projects | Category filter + search + project card grid |\n| `/projects/:id` | ProjectDetail | Project image, description, tech stack, live/GitHub links |\n| `/blog` | Blog | Search, tag filter pills, colored gradient blog cards, pagination |\n| `/blog/:slug` | BlogDetail | HTML-rendered blog content with typography styles |\n| `/contact` | Contact | Two-column: contact info icons + contact form card |\n\n## Navigation\n\nThe main navbar scrolls to sections on the home page. All items use smooth scroll with a 70px offset for the fixed navbar.\n\n| Nav Item | Target | Behaviour |\n| --- | --- | --- |\n| Home | `#hero` | Scroll to hero section |\n| About | `#about` | Scroll to About Me section |\n| Skills | `#skills` | Scroll to Technical Skills section |\n| Download CV | `#cv-download` | Scroll to CV download section |\n| Experience | `#experience` | Scroll to Professional Experience section |\n| Projects | `#projects` | Scroll to Featured Projects section |\n| Education | `#education` | Scroll to Education \u0026 Certifications section |\n| Blog | `#blog` | Scroll to Latest Blog Posts section |\n| Contact | `#contact` | Scroll to Get In Touch section |\n\n\u003e When navigating from any other page, the header navigates to `/` first, then scrolls to the target section. The active nav item auto-highlights as the user scrolls.\n\n---\n\n## Frontend Design System\n\nThe frontend has been completely redesigned using **Tailwind CSS**, featuring a modern and premium aesthetic:\n\n- **Colors**: Primary Indigo Gradient (`#6366f1` → `#a855f7`), Accent Sky Blue, Neutral Slate.\n- **Visual Style**: Glassmorphism, soft shadows, rounded-2xl cards, and smooth micro-animations.\n- **Admin Layout**: Responsive sidebar (sticky on desktop, drawer on mobile), sticky topbar with user dropdown.\n- **Components**:\n  - **Pagination**: Smart numbered buttons with first/last shortcuts and ellipsis.\n  - **Stats Cards**: Animated counters for dashboard metrics.\n  - **Modals**: Backdrop-blur overlay with slide-up animations.\n- **Responsive**: Mobile-first architecture with adaptive grids and intuitive navigation.\n- **Blog content**: Professional typography system optimized for readability.\n\n---\n\n## API Endpoints\n\n### Public\n\n| Method | Endpoint | Description |\n| --- | --- | --- |\n| GET | `/api/v1/profile` | Full profile with skills, experiences, educations |\n| GET | `/api/v1/skills` | All skills grouped by category |\n| GET | `/api/v1/projects` | All projects (filter: `category`, `search`) |\n| GET | `/api/v1/projects/{id}` | Single project |\n| GET | `/api/v1/blogs` | Published blogs (filter: `tag`) |\n| GET | `/api/v1/blogs/{slug}` | Single blog post by slug |\n| POST | `/api/v1/contact` | Submit contact message |\n\n### Admin (Sanctum protected)\n\n| Method | Endpoint | Description |\n| --- | --- | --- |\n| GET/POST | `/api/v1/admin/profile` | Upsert profile |\n| POST | `/api/v1/admin/projects` | Create project |\n| PUT/DELETE | `/api/v1/admin/projects/{id}` | Update/delete project |\n| POST | `/api/v1/admin/blogs` | Create blog post |\n| PUT/DELETE | `/api/v1/admin/blogs/{id}` | Update/delete blog post |\n| GET | `/api/v1/admin/contacts` | List contact messages |\n| PATCH | `/api/v1/admin/contacts/{id}/read` | Mark as read |\n| DELETE | `/api/v1/admin/contacts/{id}` | Delete message |\n\n---\n\n## Database Schema\n\n### `profiles`\n\nStores personal/professional profile information (name, title, bio, email, avatar, social links).\n\n### `skills`\n\n| Column | Type | Notes |\n| --- | --- | --- |\n| name | string | Skill name |\n| category | string | `frontend` \\| `backend` \\| `database` \\| `tools` |\n| level | integer | Proficiency 1–100 (default: 80) |\n| sort_order | integer | Display ordering |\n\n### `experiences`\n\n| Column | Type | Notes |\n| --- | --- | --- |\n| company | string | Employer name |\n| position | string | Job title |\n| description | text | Role description |\n| start_date | string | Start date |\n| end_date | string | nullable |\n| is_current | boolean | Currently working here |\n| technologies | json | nullable — tech used |\n\n### `educations`\n\n| Column | Type | Notes |\n| --- | --- | --- |\n| institution | string | School/University |\n| degree | string | Degree title |\n| field_of_study | string | Major/Specialization |\n| start_year | string | Start year |\n| end_year | string | nullable |\n| grade | string | nullable |\n\n### `projects`\n\n| Column | Type | Notes |\n| --- | --- | --- |\n| title | string | Project name |\n| description | text | Short description |\n| long_description | longText | nullable |\n| image | string | nullable — cover image path |\n| live_url | string | nullable |\n| github_url | string | nullable |\n| technologies | json | Tech stack |\n| category | string | `web` \\| `mobile` \\| `api` |\n| featured | boolean | Highlight on homepage |\n| sort_order | integer | Display ordering |\n\n### `blogs`\n\n| Column | Type | Notes |\n| --- | --- | --- |\n| title | string | Post title |\n| slug | string | unique — URL-friendly key |\n| excerpt | text | Short preview |\n| content | longText | Full post (supports HTML) |\n| cover_image | string | nullable |\n| tags | json | nullable |\n| status | enum | `draft` \\| `published` |\n| published_at | timestamp | nullable |\n| read_time | integer | Estimated minutes (default: 5) |\n\n### `contacts`\n\n| Column | Type | Notes |\n| --- | --- | --- |\n| name | string | Sender name |\n| email | string | Sender email |\n| subject | string | nullable |\n| message | text | Message body |\n| is_read | boolean | Read status (default: false) |\n\n### `settings`\n\nGlobal application settings stored as key–value pairs with type, section, label, visibility, and soft-delete support.\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- PHP 8.2+\n- Composer\n- Node.js 18+ \u0026 npm\n- MySQL / PostgreSQL\n- Redis\n\n### Backend Setup\n\n```bash\ncd portfolio-backend\n\n# Install dependencies\ncomposer install\n\n# Copy and configure environment\ncp .env.example .env\nphp artisan key:generate\n\n# Set DB credentials in .env, then run migrations \u0026 seed\nphp artisan migrate --seed\n```\n\n### Frontend Setup\n\n```bash\ncd portfolio-frontend\n\n# Install dependencies\nnpm install\n\n# Copy and configure environment\ncp .env.example .env\n# Set VITE_API_URL=http://localhost:8000/api/v1\n```\n\n### Running Locally\n\n```bash\n# Backend (from portfolio-backend/)\ncomposer run dev\n# API available at http://localhost:8000\n\n# Frontend (from portfolio-frontend/)\nnpm run dev\n# App available at http://localhost:3000\n```\n\n### Running Backend Tests\n\n```bash\ncd portfolio-backend\ncomposer run test\n```\n\n---\n\n## Environment Variables\n\n### Backend (`.env`)\n\n```env\nAPP_URL=http://localhost:8000\nFRONTEND_URL=http://localhost:3000\n\nDB_CONNECTION=mysql\nDB_DATABASE=portfolio\n\nCACHE_DRIVER=redis\nQUEUE_CONNECTION=redis\n```\n\n### Frontend (`.env`)\n\n```env\nVITE_API_URL=http://localhost:8000/api/v1\n```\n\n---\n\n## API Authentication\n\nThis project uses **Laravel Sanctum** for token-based API authentication on all admin endpoints.\n\n---\n\n## Recent Stability \u0026 UX Improvements\n\n- **Tailwind Migration**: Completely refactored the entire UI (Frontend \u0026 Admin) for better maintainability and professional look.\n- **Admin Sidebar Fix**: Resolved scrolling issues and footer clipping on smaller viewports.\n- **Numbered Pagination**: Replaced simple prev/next with smart numbered navigation in the admin panel.\n- **User Dropdown**: Added a floating top-right menu for quick access to Profile, Contacts, and Logout.\n- **API Resolution**: Fixed a 404 error on the `admin/upload` endpoint by standardizing path resolution.\n- **ReferenceErrors**: Resolved state initialization bugs in management pages.\n- **Telescope Setup**: Fixed Telescope missing assets and migrations.\n- **UI Visibility**: Improved Profile Management scrolling and layout.\n\n---\n\n## CORS\n\nThe backend allows cross-origin requests from the `FRONTEND_URL` defined in `.env`. Configured in `config/cors.php`.\n\n---\n\n## 🤝 Community \u0026 Contributions\n\nContributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\n- **Changelog**: See [CHANGELOG.md](CHANGELOG.md) for a detailed history of changes.\n- **Code of Conduct**: Please read our [Code of Conduct](CODE_OF_CONDUCT.md) to understand the standards of behavior.\n- **Contributing**: Check out the [Contributing Guidelines](CONTRIBUTING.md) for details on submitting pull requests.\n- **Security**: If you find a security vulnerability, please follow our [Security Policy](SECURITY.md).\n- **Issue Templates**: When opening an issue, please use the [Bug Report](.github/ISSUE_TEMPLATE/bug_report.md) or [Feature Request](.github/ISSUE_TEMPLATE/feature_request.md) templates.\n- **Codeowners**: See [CODEOWNERS](.github/CODEOWNERS) for maintenance responsibilities.\n\n---\n\n## 📜 License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faadhar41%2Fportfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faadhar41%2Fportfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faadhar41%2Fportfolio/lists"}