ui: enhance Open Graph image dimensions and styling for improved social sharing
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||

|

|
||||||
|
|
||||||
<h1 align="center">Plunk</h1>
|
<h1 align="center">Plunk</h1>
|
||||||
|
|
||||||
@@ -15,6 +15,8 @@
|
|||||||
<a href="https://github.com/useplunk/plunk/network/members"><img src="https://img.shields.io/github/forks/useplunk/plunk" alt="Forks"/></a>
|
<a href="https://github.com/useplunk/plunk/network/members"><img src="https://img.shields.io/github/forks/useplunk/plunk" alt="Forks"/></a>
|
||||||
<a href="https://github.com/useplunk/plunk/pkgs/container/plunk"><img src="https://img.shields.io/badge/docker-available-blue?logo=docker" alt="Docker"/></a>
|
<a href="https://github.com/useplunk/plunk/pkgs/container/plunk"><img src="https://img.shields.io/badge/docker-available-blue?logo=docker" alt="Docker"/></a>
|
||||||
<a href="https://github.com/sponsors/driaug"><img src="https://img.shields.io/badge/sponsor-❤-ff69b4" alt="Sponsor"/></a>
|
<a href="https://github.com/sponsors/driaug"><img src="https://img.shields.io/badge/sponsor-❤-ff69b4" alt="Sponsor"/></a>
|
||||||
|
<a href="https://docs.useplunk.com"><img src="https://img.shields.io/badge/docs-docs.useplunk.com-black" alt="Documentation"/></a>
|
||||||
|
<a href="https://useplunk.com/discord"><img src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"/></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
@@ -27,9 +29,11 @@ like [SendGrid](https://sendgrid.com/), [Resend](https://resend.com) or [Mailgun
|
|||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Transactional Emails**: Send emails straight from your API with template support and variable substitution
|
- **Transactional Emails**: Send emails straight from your API with template support and variable substitution
|
||||||
- **Campaigns**: Send newsletters and product updates to large audiences with segmentation
|
- **SMTP**: Use Plunk as an SMTP relay to send emails from any existing tool or framework
|
||||||
|
- **Campaigns**: Send newsletters and product updates to large audiences
|
||||||
- **Workflows**: Create advanced automations with triggers, delays, and conditional logic
|
- **Workflows**: Create advanced automations with triggers, delays, and conditional logic
|
||||||
- **Contact Management**: Organize contacts with custom fields and dynamic segmentation
|
- **Segments**: Organize contacts with dynamic filtering and target the right audience
|
||||||
|
- **Contact Management**: Manage contacts with custom fields and full activity history
|
||||||
- **Analytics**: Track opens, clicks, bounces, and engagement metrics in real-time
|
- **Analytics**: Track opens, clicks, bounces, and engagement metrics in real-time
|
||||||
- **Custom Domains**: Verify and send from your own domains with DKIM/SPF support
|
- **Custom Domains**: Verify and send from your own domains with DKIM/SPF support
|
||||||
|
|
||||||
@@ -46,6 +50,11 @@ You can pull the latest image from [Github](https://github.com/useplunk/plunk/pk
|
|||||||
A complete guide on how to deploy Plunk can be found in
|
A complete guide on how to deploy Plunk can be found in
|
||||||
the [documentation](https://docs.useplunk.com/self-hosting/introduction).
|
the [documentation](https://docs.useplunk.com/self-hosting/introduction).
|
||||||
|
|
||||||
|
## Community
|
||||||
|
|
||||||
|
- **Documentation**: [docs.useplunk.com](https://docs.useplunk.com)
|
||||||
|
- **Discord**: [useplunk.com/discord](https://useplunk.com/discord)
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
You are welcome to contribute to Plunk. You can find a guide on how to contribute in [CONTRIBUTING.md](CONTRIBUTING.md).
|
You are welcome to contribute to Plunk. You can find a guide on how to contribute in [CONTRIBUTING.md](CONTRIBUTING.md).
|
||||||
|
|||||||
@@ -17,18 +17,18 @@ export default function handler(req: NextRequest) {
|
|||||||
const fontData = getBricolageFont();
|
const fontData = getBricolageFont();
|
||||||
|
|
||||||
const titleLength = title.length;
|
const titleLength = title.length;
|
||||||
const fontSize = titleLength < 35 ? 72 : titleLength < 55 ? 60 : titleLength < 75 ? 50 : 42;
|
const fontSize = titleLength < 35 ? 144 : titleLength < 55 ? 120 : titleLength < 75 ? 100 : 84;
|
||||||
|
|
||||||
return new ImageResponse(
|
return new ImageResponse(
|
||||||
(
|
(
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
width: '1200px',
|
width: '2400px',
|
||||||
height: '630px',
|
height: '1260px',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
justifyContent: 'space-between',
|
justifyContent: 'space-between',
|
||||||
padding: '64px 72px',
|
padding: '128px 144px',
|
||||||
backgroundColor: '#ffffff',
|
backgroundColor: '#ffffff',
|
||||||
fontFamily: '"Bricolage Grotesque"',
|
fontFamily: '"Bricolage Grotesque"',
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
@@ -39,26 +39,26 @@ export default function handler(req: NextRequest) {
|
|||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
bottom: '-60px',
|
bottom: '-120px',
|
||||||
right: '-30px',
|
right: '-60px',
|
||||||
opacity: 0.035,
|
opacity: 0.035,
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<svg width="480" height="480" viewBox="0 0 1080 1080" fill="none">
|
<svg width="960" height="960" viewBox="0 0 1080 1080" fill="none">
|
||||||
<path d={PLUNK_P_PATH} fill="#000000" />
|
<path d={PLUNK_P_PATH} fill="#000000" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Top row: logo + URL */}
|
{/* Top row: logo + URL */}
|
||||||
<div style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center'}}>
|
<div style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center'}}>
|
||||||
<div style={{display: 'flex', alignItems: 'center', gap: '10px'}}>
|
<div style={{display: 'flex', alignItems: 'center', gap: '20px'}}>
|
||||||
<svg width="30" height="30" viewBox="0 0 1080 1080" fill="none">
|
<svg width="60" height="60" viewBox="0 0 1080 1080" fill="none">
|
||||||
<path d={PLUNK_P_PATH} fill="#171717" />
|
<path d={PLUNK_P_PATH} fill="#171717" />
|
||||||
</svg>
|
</svg>
|
||||||
<span
|
<span
|
||||||
style={{
|
style={{
|
||||||
fontSize: '22px',
|
fontSize: '44px',
|
||||||
fontWeight: 800,
|
fontWeight: 800,
|
||||||
color: '#171717',
|
color: '#171717',
|
||||||
letterSpacing: '-0.03em',
|
letterSpacing: '-0.03em',
|
||||||
@@ -67,22 +67,22 @@ export default function handler(req: NextRequest) {
|
|||||||
Plunk
|
Plunk
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span style={{fontSize: '15px', color: '#a3a3a3', letterSpacing: '0.01em'}}>
|
<span style={{fontSize: '30px', color: '#a3a3a3', letterSpacing: '0.01em'}}>
|
||||||
useplunk.com
|
useplunk.com
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Main content */}
|
{/* Main content */}
|
||||||
<div style={{display: 'flex', flexDirection: 'column', gap: '18px', maxWidth: '920px'}}>
|
<div style={{display: 'flex', flexDirection: 'column', gap: '36px', maxWidth: '1840px'}}>
|
||||||
{tag ? (
|
{tag ? (
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
padding: '6px 14px',
|
padding: '12px 28px',
|
||||||
backgroundColor: '#f4f4f5',
|
backgroundColor: '#f4f4f5',
|
||||||
borderRadius: '6px',
|
borderRadius: '12px',
|
||||||
fontSize: '15px',
|
fontSize: '30px',
|
||||||
color: '#52525b',
|
color: '#52525b',
|
||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
width: 'fit-content',
|
width: 'fit-content',
|
||||||
@@ -99,6 +99,7 @@ export default function handler(req: NextRequest) {
|
|||||||
color: '#0a0a0a',
|
color: '#0a0a0a',
|
||||||
lineHeight: 1.08,
|
lineHeight: 1.08,
|
||||||
letterSpacing: '-0.04em',
|
letterSpacing: '-0.04em',
|
||||||
|
whiteSpace: 'pre-wrap',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{title}
|
{title}
|
||||||
@@ -106,7 +107,7 @@ export default function handler(req: NextRequest) {
|
|||||||
{description ? (
|
{description ? (
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
fontSize: '22px',
|
fontSize: '44px',
|
||||||
color: '#737373',
|
color: '#737373',
|
||||||
lineHeight: 1.5,
|
lineHeight: 1.5,
|
||||||
fontWeight: 400,
|
fontWeight: 400,
|
||||||
@@ -123,8 +124,8 @@ export default function handler(req: NextRequest) {
|
|||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
width: 1200,
|
width: 2400,
|
||||||
height: 630,
|
height: 1260,
|
||||||
fonts: [
|
fonts: [
|
||||||
{
|
{
|
||||||
name: 'Bricolage Grotesque',
|
name: 'Bricolage Grotesque',
|
||||||
|
|||||||
Reference in New Issue
Block a user