Portfolio API

Complete REST API for accessing portfolio data, professional information, and contact functionality with live testing and comprehensive documentation

Thakur Ganeshsingh Journey Site API

RESTful API for the professional portfolio of Thakur Ganeshsingh, a Developer Advocate & Solutions Architect. This API provides endpoints for: - Contact form submissions - Newsletter subscription with Resend integration - LinkedIn OAuth integration and auto-publishing for blog posts - Email notifications to subscribers - Site information retrieval - Navigation data - Security health checks - LLM context data All endpoints include comprehensive security measures including CSRF protection, input validation, rate limiting, and detailed logging. Built with Next.js 15 and TypeScript, deployed with security-first architecture.

v2.0.0
Base URL
http://localhost:3000/api

Fast & Reliable

Optimized for speed with CDN caching and 99.9% uptime

CORS Enabled

Use from any frontend application without restrictions

No Authentication

Public endpoints accessible without API keys

Get Started

Start using the Portfolio API in minutes

3 minutes
1

Newsletter Subscription

Subscribe to the portfolio newsletter with Resend integration

JavaScriptcURLPython
JavaScript
javascript
// Subscribe to newsletter
const response = await fetch('https://journey.thakurganeshsingh.com/api/newsletter', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'john.doe@example.com',
    source: 'portfolio-website',
    interests: ['blogs', 'projects']
  })
});
const result = await response.json();
console.log('Subscription:', result);

Subscribe with email validation and welcome email

cURL
curl
curl -X POST "https://journey.thakurganeshsingh.com/api/newsletter" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "john.doe@example.com",
    "source": "portfolio-website",
    "interests": ["blogs", "projects"]
  }'

Command line newsletter subscription

Python
python
import requests

# Subscribe to newsletter
response = requests.post(
    'https://journey.thakurganeshsingh.com/api/newsletter',
    json={
        'email': 'john.doe@example.com',
        'source': 'api-testing',
        'interests': ['blogs', 'projects']
    }
)
result = response.json()
print('Newsletter signup:', result['message'])

Python newsletter subscription with Resend

1 of 6

API Endpoints

📋

newsletter

newsletter

Newsletter subscription and management

POST
/newsletter

Subscribe to newsletter

OPTIONS
/newsletter

CORS preflight for newsletter subscription

📋

linkedin

linkedin

LinkedIn OAuth integration and content publishing

GET
/linkedin-auth

Initiate LinkedIn OAuth flow

GET
/linkedin-callback

LinkedIn OAuth callback handler

GET
/linkedin-status

Check LinkedIn connection status

GET
/blog-auto-publish

Get auto-publish status

POST
/blog-auto-publish

Auto-publish blog posts to LinkedIn

POST
/linkedin-publish

Publish individual blog post to LinkedIn

📋

publishing

publishing

Content publishing and distribution

GET
/blog-auto-publish

Get auto-publish status

POST
/blog-auto-publish

Auto-publish blog posts to LinkedIn

POST
/linkedin-publish

Publish individual blog post to LinkedIn

OPTIONS
/linkedin-publish

CORS preflight for LinkedIn publishing

📋

notifications

notifications

Email notifications and subscriber management

POST
/notify-subscribers

Send email notifications to subscribers

OPTIONS
/notify-subscribers

CORS preflight for notifications

📧

contact

contact

Contact form operations

POST
/contact

Submit contact form

OPTIONS
/contact

CORS preflight for contact form

🧭

navigation

navigation

Site navigation and structure

GET
/navigation/docs

Get documentation navigation structure

GET
/navigation/blog

Get blog navigation structure

👤

site-info

site-info

Portfolio and professional information

GET
/site-info

Get comprehensive site and professional information

🔒

security

security

Security monitoring and health checks

GET
/security/health

Security health check endpoint

🤖

llm-context

llm-context

AI/LLM optimized content endpoints

GET
/llm-context

Get LLM-optimized context information

License & Legal

This API is licensed under the MIT

View License DetailsTerms of Service

Additional Resources

🔧 Developer Tools

📚 Integration Examples

💡 Use Cases

Portfolio Widgets

Create dynamic widgets for websites, dashboards, or applications that display real-time portfolio information.

AI/LLM Applications

Use the comprehensive context data to build AI applications that understand professional background and capabilities.

Contact Integration

Integrate the secure contact form API into any application with built-in validation and spam protection.

Monitoring & Analytics

Monitor API health and performance for applications that depend on portfolio data.

🚀 Quick Integration

Add this simple script to any website to display portfolio information:

🌐HTML
<!DOCTYPE html>
<html>
<head>
    <title>Portfolio Integration</title>
    <style>
        .portfolio-card {
            border: 1px solid #ddd;
            padding: 20px;
            border-radius: 8px;
            max-width: 400px;
            margin: 20px auto;
            font-family: Arial, sans-serif;
        }
    </style>
</head>
<body>
    <div id="portfolio-card" class="portfolio-card">
        Loading portfolio information...
    </div>

    <script>
        async function loadPortfolioInfo() {
            try {
                const response = await fetch('https://journey.thakurganeshsingh.com/api/site-info');
                const data = await response.json();
                
                document.getElementById('portfolio-card').innerHTML = `
                    <h2>${data.name}</h2>
                    <p><strong>${data.title}</strong></p>
                    <p>${data.description}</p>
                    <p><strong>Company:</strong> ${data.personal.currentCompany}</p>
                    <p><strong>Experience:</strong> ${data.personal.experience}</p>
                    <p><strong>Location:</strong> ${data.personal.location}</p>
                    <a href="mailto:${data.personal.email}">Contact</a>
                `;
            } catch (error) {
                document.getElementById('portfolio-card').innerHTML = 
                    '<p>Error loading portfolio information</p>';
            }
        }
        
        loadPortfolioInfo();
    </script>
</body>
</html>

📧 Support & Contact

For technical questions, bug reports, or feature requests, please reach out via email or connect on LinkedIn.