Skip to content

OthyTenk/my-portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

49 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

πŸš€ OkDo's Portfolio

A modern, responsive personal portfolio built with Next.js 15 and Sanity CMS

Next.js TypeScript Tailwind CSS Sanity License: MIT pnpm


πŸ“Έ Screenshot

Portfolio Preview


✨ Features

  • 🎨 Modern Design: Clean, minimalist UI with dark mode support using next-themes
  • πŸ“± Fully Responsive: Optimized for all devices from mobile to desktop
  • ⚑ Server-Side Rendering: Built with Next.js 15 App Router for optimal performance
  • πŸ—„οΈ Headless CMS: Powered by Sanity for easy content management
  • 🎯 Project Showcase: Dynamic project portfolio with categorization
  • πŸ‘€ Profile Management: Editable bio, social links, and professional information
  • πŸ“Š Analytics: Integrated with Vercel Analytics for visitor insights
  • 🎭 Rich Content: Support for Portable Text with custom components
  • πŸ” SEO Optimized: Meta tags and structured data for better search visibility
  • βš™οΈ Type Safety: Fully typed with TypeScript for robust development
  • 🎨 Tailwind CSS: Utility-first styling with custom plugins for typography and forms

πŸ› οΈ Tech Stack

Frontend

Backend & CMS

Analytics & Deployment


πŸ“ Project Structure

my-portfolio/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ (site)/              # Main site routes
β”‚   β”‚   β”œβ”€β”€ components/      # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ projects/        # Project showcase pages
β”‚   β”‚   β”œβ”€β”€ admin/           # Admin dashboard
β”‚   β”‚   β”œβ”€β”€ layout.tsx       # Site layout wrapper
β”‚   β”‚   └── page.tsx         # Homepage
β”‚   β”œβ”€β”€ (studio)/            # Sanity Studio routes
β”‚   β”‚   └── studio/
β”‚   β”‚       └── [[...index]]/
β”‚   β”œβ”€β”€ schemas/             # Sanity schemas
β”‚   β”‚   β”œβ”€β”€ profile.ts       # Profile content type
β”‚   β”‚   β”œβ”€β”€ project.ts       # Project content type
β”‚   β”‚   β”œβ”€β”€ category.ts      # Category content type
β”‚   β”‚   └── index.ts         # Schema exports
β”‚   β”œβ”€β”€ types/               # TypeScript type definitions
β”‚   β”œβ”€β”€ utils/               # Utility functions
β”‚   β”‚   β”œβ”€β”€ sanity.client.ts # Sanity client configuration
β”‚   β”‚   └── flatListHierarchical.ts
β”‚   β”œβ”€β”€ layout.tsx           # Root layout
β”‚   β”œβ”€β”€ globals.css          # Global styles
β”‚   └── not-found.tsx        # 404 page
β”œβ”€β”€ public/
β”‚   └── images/
β”‚       └── socials/         # Social media icons
β”œβ”€β”€ sanity-project/          # Standalone Sanity studio
β”œβ”€β”€ .github/
β”‚   └── ISSUE_TEMPLATE/      # GitHub issue templates
β”œβ”€β”€ sanity.config.ts         # Sanity configuration
β”œβ”€β”€ next.config.js           # Next.js configuration
β”œβ”€β”€ tailwind.config.ts       # Tailwind CSS configuration
β”œβ”€β”€ tsconfig.json            # TypeScript configuration
└── package.json             # Project dependencies

πŸš€ Getting Started

Prerequisites

  • Node.js 20.x or higher
  • pnpm 10.15.0 (or npm/yarn)
  • Sanity Account (free at sanity.io)

Installation

  1. Clone the repository

    git clone https://github.com/OthyTenk/my-portfolio.git
    cd my-portfolio
  2. Install dependencies

    pnpm install
    # or
    npm install
  3. Set up Sanity CMS

    Navigate to the sanity-project directory:

    cd sanity-project

    Login to Sanity and create a new project:

    npx sanity@latest login
    npx sanity@latest init

    Follow the prompts to:

    • Create a new project or select an existing one
    • Choose the "Clean" template
    • Set dataset to "production"
  4. Configure Sanity credentials

    Update sanity.config.ts with your project credentials:

    export default defineConfig({
      name: "sanity-project",
      title: "Your Portfolio",
      projectId: "YOUR_PROJECT_ID", // Get from sanity.io
      dataset: "production",
      // ... rest of config
    });
  5. Run the development server

    In the main project directory:

    pnpm dev
    # or
    npm run dev

    In a separate terminal, run Sanity Studio:

    cd sanity-project
    pnpm dev
    # or
    npm run dev
  6. Access the application


πŸ“ Content Management

Creating Content in Sanity Studio

  1. Profile Information

    • Navigate to Studio β†’ Profile
    • Add your personal information, bio, profile picture
    • Configure social media links (GitHub, LinkedIn, Twitter)
    • Upload your resume (optional)
  2. Projects

    • Navigate to Studio β†’ Projects
    • Click "Create" to add a new project
    • Fill in project details:
      • Title & Slug
      • Overview/Description
      • Project Image
      • Live Link
      • Categories
      • Date
  3. Categories

    • Navigate to Studio β†’ Categories
    • Create parent categories (e.g., "Frontend", "Backend")
    • Create child categories for specific technologies
    • Add category images/icons

🎨 Customization

Styling

Customize the theme in tailwind.config.ts:

const config: Config = {
  theme: {
    extend: {
      colors: {
        // Add your custom colors
      },
      // Add custom fonts, spacing, etc.
    },
  },
};

Dark Mode

The portfolio includes a built-in dark mode toggle. Customize dark mode colors in:

  • app/layout.tsx - Root theme setup
  • app/globals.css - Global dark mode styles
  • Component-level Tailwind classes using dark: prefix

🚒 Deployment

Deploy to Vercel (Recommended)

  1. Push your code to GitHub

    git add .
    git commit -m "Initial commit"
    git push origin main
  2. Import to Vercel

    • Visit vercel.com
    • Import your GitHub repository
    • Vercel will auto-detect Next.js settings
    • Add environment variables if needed
    • Deploy!
  3. Deploy Sanity Studio

    cd sanity-project
    pnpm run deploy
    # or
    npm run deploy

Environment Variables

If using external APIs or services, create a .env.local file:

NEXT_PUBLIC_SANITY_PROJECT_ID=your_project_id
NEXT_PUBLIC_SANITY_DATASET=production
SANITY_API_TOKEN=your_api_token (for mutations)

πŸ“Š Analytics

This portfolio includes Vercel Analytics for tracking visitor metrics. To enable:

  1. Enable in Vercel Dashboard

    • Navigate to your project in Vercel
    • Go to Analytics tab
    • Enable Analytics
  2. Already integrated via @vercel/analytics/react in app/layout.tsx


🀝 Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Please read CONTRIBUTING.md for details on our code of conduct and development process.


πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ‘¨β€πŸ’» Author

OkDo


πŸ™ Acknowledgments

  • Next.js for the amazing React framework
  • Sanity.io for the flexible headless CMS
  • Tailwind CSS for the utility-first CSS framework
  • Vercel for seamless deployment and hosting

πŸ“ž Support

If you have any questions or run into issues, please:


Made with ❀️ by OkDo

⭐ Star this repo if you found it helpful!

About

The sample portfolio with Next.js and Sanity

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors