mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2025-08-28 11:39:52 +02:00
feat: add user open graph (#5543)
* feat: add user open graph * fix: add proxy for open graph
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import Cookies from 'js-cookie';
|
||||
import { TOKEN_COOKIE_NAME } from '../lib/jwt.ts';
|
||||
import type { APIContext } from 'astro';
|
||||
|
||||
|
45
src/pages/og/[slug].ts
Normal file
45
src/pages/og/[slug].ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { APIRoute } from 'astro';
|
||||
|
||||
export const prerender = false;
|
||||
|
||||
type Params = {
|
||||
slug: string;
|
||||
};
|
||||
|
||||
export const GET: APIRoute<any, Params> = async (context) => {
|
||||
const { slug } = context.params;
|
||||
|
||||
if (!slug.startsWith('user-')) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
error: 'Invalid slug',
|
||||
}),
|
||||
{
|
||||
status: 400,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
const username = slug.replace('user-', '');
|
||||
if (!username) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
error: 'Invalid username',
|
||||
}),
|
||||
{
|
||||
status: 400,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
const response = await fetch(
|
||||
`${import.meta.env.PUBLIC_API_URL}/v1-profile-open-graph/${username}`,
|
||||
);
|
||||
|
||||
const svg = await response.text();
|
||||
return new Response(svg, {
|
||||
headers: {
|
||||
'Content-Type': 'image/svg+xml',
|
||||
},
|
||||
});
|
||||
};
|
@@ -1,11 +1,7 @@
|
||||
---
|
||||
import { FrownIcon } from 'lucide-react';
|
||||
import { userApi } from '../../api/user';
|
||||
import AccountLayout from '../../layouts/AccountLayout.astro';
|
||||
import { UserPublicProfilePage } from '../../components/UserPublicProfile/UserPublicProfilePage';
|
||||
import OpenSourceBanner from '../../components/OpenSourceBanner.astro';
|
||||
import Footer from '../../components/Footer.astro';
|
||||
import BaseLayout from "../../layouts/BaseLayout.astro";
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
|
||||
export const prerender = false;
|
||||
|
||||
@@ -26,10 +22,17 @@ let errorMessage = '';
|
||||
if (error || !userDetails) {
|
||||
errorMessage = error?.message || 'User not found';
|
||||
}
|
||||
|
||||
const origin = Astro.url.origin;
|
||||
const ogImage = `${origin}/og/user-${username}`;
|
||||
---
|
||||
|
||||
<BaseLayout title={`${userDetails?.name} - Skill Profile at roadmap.sh`}>
|
||||
{!errorMessage && <UserPublicProfilePage {...userDetails} client:load />}
|
||||
<BaseLayout
|
||||
title={`${userDetails?.name || 'Unknown'} - Skill Profile at roadmap.sh`}
|
||||
description='Check out my skill profile at roadmap.sh'
|
||||
ogImageUrl={ogImage}
|
||||
>
|
||||
{!errorMessage && <UserPublicProfilePage {...userDetails!} client:load />}
|
||||
{
|
||||
errorMessage && (
|
||||
<div class='container my-24 flex flex-col'>
|
||||
|
Reference in New Issue
Block a user