Skip to content

Commit 3001a20

Browse files
committed
Add Numberly content.
1 parent 2187b97 commit 3001a20

32 files changed

+312
-140
lines changed

public/draft.png

14 KB
Loading

src/components/CardContent.astro

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
---
2-
2+
import { getEntry } from "astro:content";
33
import { marked } from 'marked';
4-
const { entry } = Astro.props;
5-
const html = entry && entry.body ? marked.parse(entry.body) : "";
4+
const { collection, entry:entryId } = Astro.props;
65
6+
const entry = await getEntry(collection, entryId);
7+
console.log(entryId)
8+
const html = entry && entry.body ? marked.parse(entry.body) : "";
79
810
---
911

10-
<div class="mb-2 prose prose-li:m-0 prose-ul:m-0 prose-ul:mb-2 prose-a:underline prose-h1:text-text prose-headings:font-title prose-headings:text-text prose-a:text-text hover:prose-a:text-primary-hover prose-strong:text-text prose-strong:font-bold prose-li:marker:text-text p-6">
11-
<article set:html={html} />
12-
</div>
12+
{ html &&
13+
<div class="mb-2 prose prose-li:m-0 prose-ul:m-0 prose-ul:mb-2 prose-a:underline prose-h1:text-text prose-headings:font-title prose-headings:text-text prose-a:text-text hover:prose-a:text-primary-hover prose-strong:text-text prose-strong:font-bold prose-li:marker:text-text p-6">
14+
<article set:html={html} />
15+
</div>
16+
}

src/components/JobCard.astro

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
---
22
import CardContent from "@components/CardContent.astro";
3-
const { job, sponsor } = Astro.props;
3+
import { getEntry } from "astro:content";
4+
const { job:jobId, sponsor:sponsorId } = Astro.props;
45
5-
// TODO: add tags
6-
const { title, location, type, level, salary, description, responsibilities, requirements, benefits, apply_link } = job.data;
6+
const job = await getEntry("jobs", jobId);
7+
if (!job) {
8+
throw new Error(`Job with ID "${jobId}" not found`);
9+
}
10+
11+
const sponsor = await getEntry("sponsors", sponsorId);
712
13+
if (!sponsor) {
14+
throw new Error(`Sponsor with ID "${sponsorId}" not found`);
15+
}
816
17+
// TODO: add tags
18+
const { title, location, type, level, salary, description, responsibilities, requirements, benefits, apply_link, draft } = job.data;
919
20+
const isJobPage = Astro.url.pathname == `/sponsor/${job.id}`;
1021
---
1122

12-
<div class="mb-6 last:mb-0">
13-
<div class="flex-1 p-6 rounded-lg shadow-md bg-white">
14-
<a href={`/sponsor/${job.id}`}>
23+
<div class="mb-6 last:mb-0 rounded-lg shadow-md bg-white">
24+
<div class=`flex-1 p-6 ${draft ? "draft": ""}`>
25+
<a href={`/sponsor/${jobId}`}>
1526
<h2 class="text-3xl font-bold mb-2">{title}</h2>
1627
</a>
1728

@@ -23,7 +34,7 @@ const { title, location, type, level, salary, description, responsibilities, req
2334
<p class="text-gray-600 mb-2">{level}{type}{location}</p>
2435
}
2536
<p class="text-gray-700 mb-4">{salary}</p>
26-
<p class="mb-6">{description}</p>
37+
<p class="mb-3">{description}</p>
2738

2839
{ responsibilities &&
2940
<h3 class="text-xl font-semibold mb-2">Responsibilities</h3>
@@ -46,9 +57,6 @@ const { title, location, type, level, salary, description, responsibilities, req
4657
</ul>
4758
}
4859

49-
50-
<CardContent entry={job} />
51-
5260
<a
5361
href={apply_link}
5462
target="_blank"
@@ -84,4 +92,5 @@ const { title, location, type, level, salary, description, responsibilities, req
8492
color: var(--color-primary-hover);
8593
text-decoration: underline;
8694
}
95+
8796
</style>

src/components/SponsorCard.astro

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@
22
import { type CollectionEntry, getEntry } from "astro:content";
33
import { Image } from "astro:assets";
44
import { sponsorLogos } from "@data/sponsorLogos";
5-
65
import Icon from "@ui/Icon.astro";
76
8-
const { sponsor, showJobs=false } = Astro.props;
7+
const { sponsor: sponsorId, showJobs=false } = Astro.props;
8+
const sponsor = await getEntry("sponsors", sponsorId);
9+
10+
if (!sponsor) {
11+
throw new Error(`Sponsor with ID "${sponsorId}" not found`);
12+
}
13+
914
const {
1015
name: title,
1116
url: website,
@@ -14,6 +19,7 @@ const {
1419
description,
1520
socials,
1621
logo_padding = false,
22+
draft
1723
} = sponsor.data;
1824
1925
const jobFiles = import.meta.glob("../content/sponsors/*/!(index).md");
@@ -49,9 +55,9 @@ const socialLinks = [
4955
---
5056

5157
<div
52-
class="lg:max-w-[400px] flex flex-col gap-6 p-6 rounded-lg shadow-md bg-white text-black mb-6"
58+
class=`lg:max-w-[400px] flex flex-col gap-6 p-6 rounded-lg shadow-md bg-white text-black mb-6 ${draft ? "draft": "no-draft"}`
5359
>
54-
<div class="w-full flex justify-center items-center md:items-center min-h-[140px]">
60+
<div class="w-full flex justify-center items-center md:items-center min-h-[140px] ">
5561
{
5662
logo && (
5763
<Image
@@ -121,6 +127,7 @@ const socialLinks = [
121127
{socialLinks
122128
.filter((link) => socials?.[link.key])
123129
.map((link) => {
130+
if (!socials) return;
124131
const url = socials[link.key];
125132
let iconColor:string;
126133

src/components/SponsorDisplay.astro

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
---
2+
import { getEntry } from "astro:content";
23
import { Image } from "astro:assets";
3-
const { sponsor } = Astro.props;
4+
const { sponsor: sponsorId } = Astro.props;
5+
6+
7+
const sponsor = await getEntry("sponsors", sponsorId);
8+
9+
if (!sponsor) {
10+
throw new Error(`Sponsor with ID "${sponsorId}" not found`);
11+
}
12+
413
514
import { sponsorDisplay } from "@data/sponsorDisplay";
615
const image = sponsorDisplay[sponsor.id]

src/components/SponsorLogo.astro

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
---
2+
import { getEntry } from "astro:content";
23
import { Image } from "astro:assets";
34
import { sponsorLogos } from "@data/sponsorLogos";
45
5-
const { sponsor } = Astro.props;
6+
const { sponsor: sponsorId } = Astro.props;
7+
8+
9+
const sponsor = await getEntry("sponsors", sponsorId);
10+
11+
if (!sponsor) {
12+
throw new Error(`Sponsor with ID "${sponsorId}" not found`);
13+
}
14+
615
const {
716
name: title,
817
url: website,

src/content/config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,9 @@ const sponsors = defineCollection({
210210
bluesky: z.string().url().optional().nullable(),
211211
})
212212
.optional(),
213-
jobs: z.array(z.string()).optional(),
214213
logo_padding: z.string().optional(),
214+
draft: z.boolean().optional().default(false),
215+
jobs: z.array(reference("jobs")).optional().default([]),
215216
}),
216217
});
217218

@@ -229,6 +230,8 @@ const jobs = defineCollection({
229230
requirements: z.array(z.string()).nullable(),
230231
benefits: z.array(z.string()).nullable(),
231232
apply_link: z.string().url().optional(),
233+
draft: z.boolean().optional().default(false),
234+
sponsor: reference("sponsors").optional(),
232235
}),
233236
});
234237

src/content/sponsors/1password/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ socials:
1717
bluesky:
1818
tier: Supporters
1919
logo_padding: 30px 10px
20+
draft: true
2021
---
2122

2223
## About 1Password

src/content/sponsors/1password/intern.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ benefits:
2323
- "Exposure to cybersecurity innovation."
2424
- "Mentorship from industry experts."
2525
apply_link: "https://1password.com/careers"
26+
draft: true
2627
---

src/content/sponsors/1password/product-design-intern.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ benefits:
2323
- "Opportunity to shape products used by millions."
2424
- "Access to 1Password’s design community."
2525
apply_link: "https://1password.com/careers"
26+
draft: true
2627
---

src/content/sponsors/evolabel/digital-marketing-manager.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ benefits:
2323
- "Work in a newly established office in Sweden [[1]]."
2424
- "Support for professional development."
2525
apply_link: "https://evolabel.com/careers"
26+
draft: true
2627
---

src/content/sponsors/evolabel/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ socials:
1717
bluesky:
1818
tier: Supporters
1919
logo_padding: 30px 0
20+
draft: true
2021
---
2122

2223
## About Evolabel

src/content/sponsors/jetbrains/data-scientist.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ benefits:
2323
- "Opportunity to work on cutting-edge developer tools."
2424
- "Professional growth and mentorship programs."
2525
apply_link: "https://careers.jetbrains.com"
26+
draft: true
2627
---

src/content/sponsors/jetbrains/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ socials:
1717
bluesky:
1818
tier: Gold
1919
logo_padding: 20px 10px
20+
draft: true
2021
---
2122

2223
## About JetBrains

src/content/sponsors/numberly/dataops.md

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/content/sponsors/numberly/index.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22
name: Numberly
33
url: https://numberly.com/
44
description:
5-
Numberly is a global data marketing technology company that helps advertisers
6-
build lasting customer relationships through omnichannel strategies,
7-
programmatic trading, and conversational platforms.
5+
Numberly, Marketing Technologist, met la data au service de la relation
6+
client. Le groupe permet aux entreprises de comprendre les besoins de leurs
7+
prospects et clients et d’interagir avec chacun de manière performante et
8+
pertinente.
89
tier: Gold
910
logo_padding: 30px
1011
---
1112

12-
Numberly helps its customers collect, analyze and leverage their data across all
13-
marketing channels. We are more than 200 engineers divided into teams with a
14-
human dimension, where everyone develops a positive influence and can be
15-
autonomous. Our sustained growth encourages us to constantly question our
16-
technical and organizational choices.
13+
Numberly, Marketing Technologist, met la data au service de la relation client.
14+
Le groupe permet aux entreprises de comprendre les besoins de leurs prospects et
15+
clients et d’interagir avec chacun de manière performante et pertinente.
1716

18-
Our challenges are international: 8 offices worldwide.
17+
Nos experts en orchestration omnicanal, en activation programmatique et en
18+
plateformes conversationnelles développent et mettent en place des expériences à
19+
fort impact. Nous opérons dans plus de 50 pays : le groupe, résolument
20+
international, poursuit son expansion depuis 25 ans.
1921

20-
Our wide range of interconnected products and technical challenges are diverse
21-
and complex. Our daily missions consist of processing thousands of requests per
22-
second, operating databases of several petabytest, automating our entire
23-
bare-metal infrastructure, and building the digital marketing interfaces of
24-
tomorrow.
22+
Plus de 500 collaborateurs, basés à Paris, Londres, Montréal, New York et Dubaï,
23+
contribuent tous les jours à la qualité d’exécution et la satisfaction client,
24+
en restant curieux, agiles et innovants, un état d’esprit qui anime Numberly.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
title: "Internship - Software Engineer - Backend / Fullstack"
3+
location: "Paris"
4+
type: "Hybrid"
5+
level: "Intern"
6+
salary:
7+
tags:
8+
[
9+
"FastAPI",
10+
"Vue 3",
11+
"PostgreSQL",
12+
"MSSQL",
13+
"Kafka",
14+
"Kubernetes",
15+
"Docker",
16+
"GitLab CI/CD",
17+
"Cypress",
18+
"Pytest",
19+
"Grafana",
20+
"Sentry",
21+
"Prometheus",
22+
"Graylog",
23+
]
24+
description: |
25+
Numberly is recognized as one of the world's leading data marketing specialists with nearly 500 employees and 8 offices worldwide serving more than 500 blue-chip clients (L'Oréal, Sanofi, Moleskine, Campari, Nestlé, HSBC..). By putting technology to work for brands and consumers, Numberly is at the heart of business growth and everyone's desire for more sustainable and relevant marketing. Numberly leverages the latest advances in data processing, analysis and activation, incorporating artificial intelligence technologies. This approach is part of a virtuous circle in which business competitiveness goes hand in hand with greater respect for privacy and data protection.
26+
responsibilities:
27+
- Supporting the operational run of your assigned squad
28+
- Improving deployment and monitoring processes while keeping our technical
29+
stack updated
30+
- Collaborating with product owners and UX/UI designers to develop new
31+
features
32+
- Proposing technical and organizational improvements to enhance platform
33+
performance and maintainability
34+
requirements:
35+
- Collaborative mindset with strong teamwork and stakeholder communication
36+
skills
37+
- Preference for Linux use (not mandatory)
38+
- Familiarity with our tech stack (especially backend technologies like
39+
Python/FastAPI)
40+
- Vue 3 knowledge is a plus but not required
41+
- Open-source contributions experience is a bonus
42+
- Ability to document and advocate for technical decisions
43+
benefits:
44+
- Fast onboarding with mentorship and cross-team rotations
45+
- Global team collaboration via monthly "Happy Meetings"
46+
- Freedom of speech and collaborative decision-making culture
47+
- Social impact initiatives (1000mercis, Open Source contributions)
48+
- Diverse, inclusive workplace (30+ nationalities, 97/100 gender equity score)
49+
- Modern offices with amenities (library, music studio, pet-friendly)
50+
- Remote work flexibility and international office mobility
51+
- Swile meal vouchers, Gymlib access, and mystery lunches
52+
- Support for people with disabilities
53+
apply_link: https://joinus.numberly.com/jobs/5783005-internship-software-engineer-backend-fullstack
54+
---

0 commit comments

Comments
 (0)