Skip to main content
Skip to main content

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
https://journey.thakurganeshsingh.com/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

📋

linkedin

linkedin

LinkedIn OAuth integration and content publishing

📋

publishing

publishing

Content publishing and distribution

📋

notifications

notifications

Email notifications and subscriber management

📧

contact

contact

Contact form operations

🧭

navigation

navigation

Site navigation and structure

👤

site-info

site-info

Portfolio and professional information

🔒

security

security

Security monitoring and health checks

🤖

llm-context

llm-context

AI/LLM optimized content endpoints

📋

ai

ai

Conversational AI assistant grounded in portfolio content

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.