PageSourceSearch

https://adrienpoly.com/

html adrienpoly.com collected 2026-09-25 21:46:27 UTC 8,201 bytes, 311 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <meta charset="UTF-8" />
5    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6    <title>Adrien Poly</title>
7
8    <link rel="icon" href="assets/favicon.ico" sizes="any" />
9    <link rel="icon" type="image/png" sizes="32x32" href="assets/favicon-32x32.png" />
10    <link rel="icon" type="image/png" sizes="16x16" href="assets/favicon-16x16.png" />
11    <link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon.png" />
12    <link rel="manifest" href="assets/site.webmanifest" />
13    <meta name="theme-color" content="#0b0b0c" />
14
15    <style>
16      @font-face {
17        font-family: "Geist";
18        src: url("https://cdn.jsdelivr.net/npm/[email protected]/dist/fonts/geist-sans/Geist-Variable.woff2")
19          format("woff2");
20        font-weight: 100 900;
21        font-style: normal;
22        font-display: swap;
23      }
24
25      :root {
26        --accent: #b3211c;
27      }
28
29      *,
30      *::before,
31      *::after {
32        box-sizing: border-box;
33      }
34
35      html {
36        height: 100%;
37        overflow: hidden;
38      }
39
40      html,
41      body {
42        margin: 0;
43        background: #0b0b0c;
44        font-family: "Geist", sans-serif;
45      }
46
47      body {
48        height: 100%;
49        min-height: 100dvh;
50        overflow: hidden;
51        display: flex;
52        align-items: stretch;
53        justify-content: center;
54      }
55
56      .v5-root {
57        position: relative;
58        width: 100%;
59        max-width: 1280px;
60        height: 100dvh;
61        padding: clamp(32px, 5vh, 64px) clamp(24px, 4vw, 64px);
62        background: #0b0b0c;
63        color: #e8e6e0;
64        display: flex;
65        flex-direction: column;
66        justify-content: center;
67        align-items: center;
68        overflow: hidden;
69      }
70
71      .v5-bg {
72        position: absolute;
73        inset: 0;
74        background: radial-gradient(
75          900px 500px at 50% 30%,
76          color-mix(in srgb, var(--accent, #b3211c) 8%, transparent),
77          transparent 70%
78        );
79        pointer-events: none;
80      }
81
82      .v5-tag {
83        position: relative;
84        z-index: 1;
85        font-family: "Geist", sans-serif;
86        font-weight: 380;
87        font-size: 34px;
88        line-height: 1.36;
89        letter-spacing: -0.018em;
90        color: #e8e6e0;
91        max-width: 880px;
92        text-align: center;
93        margin: 0;
94        text-wrap: balance;
95      }
96
97      .v5-tag b {
98        font-weight: 560;
99        color: #fafaf7;
100        position: relative;
101      }
102
103      .v5-tag b::after {
104        content: "";
105        position: absolute;
106        left: 0;
107        right: 0;
108        bottom: -4px;
109        height: 2px;
110        border-radius: 2px;
111        background: var(--accent, #b3211c);
112      }
113
114      .v5-tag .v5-mute {
115        color: #9a958a;
116        font-style: normal;
117      }
118
119      .v5-tag .v5-mute em {
120        font-style: normal;
121        color: var(--accent, #b3211c);
122      }
123
124      .v5-links {
125        position: relative;
126        z-index: 1;
127        display: flex;
128        gap: 28px;
129        margin-top: clamp(32px, 4vh, 48px);
130        font-size: 14px;
131        letter-spacing: 0.01em;
132        flex-shrink: 0;
133      }
134
135      .v5-links a {
136        color: #e8e6e0;
137        display: inline-flex;
138        align-items: center;
139        gap: 8px;
140        position: relative;
141        padding-bottom: 3px;
142        text-decoration: none;
143        transition: color 0.2s;
144      }
145
146      .v5-links a::before {
147        content: "";
148        width: 5px;
149        height: 5px;
150        border-radius: 50%;
151        background: var(--accent, #b3211c);
152        opacity: 0;
153        transition: opacity 0.2s;
154        flex-shrink: 0;
155      }
156
157      .v5-links a::after {
158        content: "";
159        position: absolute;
160        bottom: 0;
161        left: 13px;
162        right: 0;
163        height: 1px;
164        background: #3a3833;
165        transition: background 0.2s;
166      }
167
168      .v5-links a:hover {
169        color: #fafaf7;
170      }
171
172      .v5-links a:hover::before {
173        opacity: 1;
174      }
175
176      .v5-links a:hover::after {
177        background: var(--accent, #b3211c);
178      }
179
180      .v5-projects {
181        position: relative;
182        z-index: 1;
183        width: 100%;
184        max-width: 960px;
185        margin-top: clamp(36px, 5vh, 56px);
186        display: flex;
187        flex-direction: column;
188        align-items: center;
189        gap: 20px;
190        flex-shrink: 0;
191      }
192
193      .v5-projects-heading {
194        margin: 0;
195        font-size: 11px;
196        font-weight: 500;
197        letter-spacing: 0.08em;
198        color: #9a958a;
199      }
200
201      .v5-project-list {
202        margin: 0;
203        padding: 0;
204        list-style: none;
205        width: 100%;
206        display: grid;
207        grid-template-columns: repeat(3, 1fr);
208        gap: 16px;
209      }
210
211      .v5-project-card {
212        display: flex;
213        flex-direction: column;
214        gap: 8px;
215        height: 100%;
216        padding: 20px;
217        border: 1px solid #2a2824;
218        border-radius: 10px;
219        background: color-mix(in srgb, #fafaf7 2.5%, #0b0b0c);
220        text-decoration: none;
221        transition: border-color 0.2s, background 0.2s;
222      }
223
224      .v5-project-card:hover {
225        border-color: color-mix(in srgb, var(--accent, #b3211c) 50%, #2a2824);
226        background: color-mix(in srgb, var(--accent, #b3211c) 5%, #0b0b0c);
227      }
228
229      .v5-project-card h3 {
230        margin: 0;
231        font-size: 15px;
232        font-weight: 500;
233        letter-spacing: -0.01em;
234        color: #fafaf7;
235        transition: color 0.2s;
236      }
237
238      .v5-project-card:hover h3 {
239        color: var(--accent, #b3211c);
240      }
241
242      .v5-project-card p {
243        margin: 0;
244        font-size: 13px;
245        line-height: 1.55;
246        color: #9a958a;
247        letter-spacing: 0.005em;
248      }
249
250      @media (max-width: 760px) {
251        html,
252        body {
253          overflow: auto;
254        }
255
256        .v5-root {
257          height: auto;
258          min-height: 100dvh;
259          overflow: visible;
260          justify-content: flex-start;
261          padding-top: 48px;
262          padding-bottom: 48px;
263        }
264
265        .v5-project-list {
266          grid-template-columns: 1fr;
267        }
268      }
269    </style>
270  </head>
271  <body>
272    <main class="v5-root">
273      <div class="v5-bg" aria-hidden="true"></div>
274
275      <p class="v5-tag">
276        I'm <b>Adrien Poly</b>, a CTO and product builder based in Bordeaux. I build digital products with a mix of code, product thinking, and design sensitivity,
277        <span class="v5-mute">and contribute to <em>open source</em> projects in the Ruby and Rails community.</span>
278      </p>
279
280      <nav class="v5-links" aria-label="Social links">
281        <a href="https://github.com/adrienpoly" target="_blank" rel="noopener noreferrer">GitHub</a>
282        <a href="https://x.com/adrienpoly" target="_blank" rel="noopener noreferrer">Twitter</a>
283        <a href="https://linkedin.com/in/adrienpoly" target="_blank" rel="noopener noreferrer">LinkedIn</a>
284      </nav>
285
286      <section class="v5-projects" aria-labelledby="projects-heading">
287        <h2 class="v5-projects-heading" id="projects-heading">Currently working on</h2>
288        <ul class="v5-project-list">
289          <li>
290            <a class="v5-project-card" href="https://plume-app.co" target="_blank" rel="noopener noreferrer">
291              <h3>Plume</h3>
292              <p>Helping students become better writers through creative and structured writing experiences.</p>
293            </a>
294          </li>
295          <li>
296            <a class="v5-project-card" href="https://rubyevents.org" target="_blank" rel="noopener noreferrer">
297              <h3>RubyEvents.org</h3>
298              <p>Making Ruby talks, conferences, and community events easier to discover, watch, and revisit.</p>
299            </a>
300          </li>
301          <li>
302            <a class="v5-project-card" href="https://listdeco.com" target="_blank" rel="noopener noreferrer">
303              <h3>ListDeco.com</h3>
304              <p>A simple way for interior decorators to build, organize, and share curated shopping lists with their clients.</p>
305            </a>
306          </li>
307        </ul>
308      </section>
309    </main>
310  </body>
311</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.