Repository navigation
Expand file tree
/
Copy pathprojects.html
More file actions
111 lines (96 loc) · 28.5 KB
/
Copy pathprojects.html
File metadata and controls
111 lines (96 loc) · 28.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Projects | Redwan Meslem</title><style>
:root{--paper:#f5f5f3;--ink:#171918;--muted:#6c706d;--line:#dedfdb;--green:#315b45;--blue:#dfe8f4;--max:1320px}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:80px}body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:hover{color:var(--green)}.wrap{width:min(var(--max),calc(100% - 96px));margin:auto}
header{position:sticky;top:0;z-index:5;background:rgba(245,245,243,.95);border-bottom:1px solid var(--line);backdrop-filter:blur(10px)}.nav{height:76px;display:flex;justify-content:space-between;align-items:center}.brand{font-size:17px;font-weight:650;letter-spacing:-.025em}.navlinks{display:flex;align-items:center;gap:34px;font-size:15px;color:#565a57}.navlinks a:last-child{color:var(--green)}
.hero{min-height:calc(100vh - 76px);padding:68px 0 76px;display:grid;grid-template-columns:1.05fr .85fr;gap:clamp(48px,8vw,128px);align-items:center}.hero-copy{max-width:660px}.overline{display:flex;align-items:center;gap:12px;margin:0 0 30px;color:var(--green);font-size:12px;font-weight:650;letter-spacing:.16em;text-transform:uppercase}.overline:before{content:"";width:28px;height:1px;background:var(--green)}h1{font-size:clamp(58px,7.2vw,100px);line-height:.96;letter-spacing:-.075em;font-weight:560;margin:0 0 25px}.role{font-size:clamp(19px,2vw,27px);letter-spacing:-.035em;line-height:1.3;margin:0 0 23px}.intro{font-size:19px;line-height:1.65;color:var(--muted);max-width:550px;margin:0 0 30px}.hero-tags{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 32px}.tag{border:1px solid #d3d7d2;border-radius:99px;color:#59625c;padding:6px 12px;font-size:12px;letter-spacing:.015em}.social{display:flex;gap:28px;font-size:15px}.social a{padding-bottom:4px;border-bottom:1px solid var(--green)}.portrait-wrap{width:100%;max-width:500px;justify-self:end;position:relative}.portrait{display:block;width:100%;height:auto;max-height:calc(100vh - 150px);object-fit:contain;object-position:center}.portrait-caption{position:absolute;right:-12px;bottom:18px;writing-mode:vertical-rl;transform:rotate(180deg);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:#fff;text-shadow:0 1px 6px #0008}
.section{padding:50px 0 56px;border-top:1px solid var(--line)}.section-head{display:grid;grid-template-columns:250px 1fr;gap:32px;align-items:start;margin-bottom:28px}.section-title{font-size:12px;letter-spacing:.15em;text-transform:uppercase;color:var(--green);font-weight:650;margin:5px 0}.section-note{font-size:14px;color:var(--muted);margin:0;max-width:640px}.areas{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.area{padding:24px 28px 26px 0;min-height:185px}.area+.area{padding-left:28px;border-left:1px solid var(--line)}.area-index{font-size:11px;letter-spacing:.14em;color:var(--green);margin-bottom:13px}.area h3{font-size:24px;letter-spacing:-.04em;line-height:1.1;font-weight:560;margin:0 0 15px}.area-tags{display:flex;flex-wrap:wrap;gap:7px 15px;color:var(--muted);font-size:14px}.area-tags span+span:before{content:"·";margin-right:15px;color:#a2aaa3}
.projects{display:flex;flex-wrap:wrap;gap:10px}.project{padding:13px 17px;border:1px solid var(--line);background:transparent;font-size:15px;letter-spacing:-.015em}.project.featured{background:#e7ece7;border-color:#e7ece7}.project.ai{background:var(--blue);border-color:var(--blue)}.research{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.research-item{min-height:135px;padding:18px 18px 14px;background:#e8ebe7;display:flex;flex-direction:column;justify-content:space-between}.research-item:nth-child(2){background:#e8edf3}.research-item:nth-child(3){background:#eeece6}.research-kicker{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.research-title{font-size:20px;line-height:1.18;letter-spacing:-.035em;max-width:250px}.research-state{font-size:11px;color:var(--muted)}
.engagements{display:grid;grid-template-columns:1.35fr 1fr 1fr 1fr;gap:12px}.engagements img{display:block;width:100%;height:210px;object-fit:cover;object-position:center;background:#e3e5e2}.engagements img:first-child{object-position:center 28%}.background-line{font-size:clamp(17px,2.3vw,27px);letter-spacing:-.03em;line-height:1.4}.background-line span{color:#9a9e9a;padding:0 8px}.contact-row{display:flex;align-items:center;justify-content:space-between}.contact-row .section-title{margin:0}.contact-link{font-size:18px;border-bottom:1px solid var(--green);padding-bottom:4px;color:var(--green)}footer{padding:22px 0 32px;border-top:1px solid var(--line);font-size:11px;color:var(--muted)}
@media(max-width:850px){.wrap{width:calc(100% - 48px)}.navlinks{gap:18px;font-size:13px}.hero{grid-template-columns:1fr .78fr;gap:32px}.section-head{grid-template-columns:190px 1fr}.area{padding-right:18px}.area+.area{padding-left:18px}.engagements img{height:170px}}
@media(max-width:650px){.wrap{width:calc(100% - 40px)}.nav{height:auto;min-height:70px;align-items:flex-start;flex-direction:column;justify-content:center;gap:8px;padding:10px 0}.navlinks{width:100%;overflow-x:auto;white-space:nowrap;padding-bottom:3px;font-size:13px;gap:18px}.hero{min-height:0;padding:50px 0 46px;grid-template-columns:1fr;gap:30px}.hero-copy{max-width:none}.overline{margin-bottom:22px}h1{font-size:clamp(58px,15vw,82px)}.role{font-size:20px}.intro{font-size:17px}.portrait-wrap{justify-self:start;width:min(72%,300px)}.portrait{max-height:none}.portrait-caption{right:-18px}.section{padding:34px 0 38px}.section-head{display:block;margin-bottom:20px}.section-note{margin-top:10px}.areas{grid-template-columns:1fr}.area{min-height:0;padding:19px 0}.area+.area{border-left:0;border-top:1px solid var(--line);padding-left:0}.area h3{font-size:21px;margin-bottom:9px}.research{grid-template-columns:1fr;gap:9px}.research-item{min-height:110px}.engagements{grid-template-columns:1fr 1fr;gap:8px}.engagements img{height:34vw;min-height:120px}.contact-row{align-items:flex-start;gap:14px;flex-direction:column}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
.events-link{display:inline-block;margin-top:12px;color:var(--green);font-size:14px;border-bottom:1px solid var(--green);padding-bottom:3px}
.archive-intro{padding:64px 0 42px;max-width:850px}.archive-intro h1{font-size:clamp(44px,6vw,70px);line-height:1.06;margin:15px 0 20px;letter-spacing:-.055em}.archive-intro p{font-size:18px;color:var(--muted);max-width:660px}.archive-jump{display:flex;flex-wrap:wrap;gap:20px;margin:26px 0 0;font-size:14px;color:var(--green)}.archive-jump a{border-bottom:1px solid var(--green);padding-bottom:3px}.archive-gallery{display:grid;grid-template-columns:1.1fr 1fr 1fr;gap:14px;margin-bottom:48px}.archive-gallery figure{margin:0}.archive-gallery img{width:100%;height:270px;object-fit:cover;display:block}.archive-gallery figcaption{font-size:12px;color:var(--muted);margin-top:9px}.archive-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.archive-card{padding:22px 0;border-top:1px solid var(--line)}.archive-card h3{font-size:23px;letter-spacing:-.035em;line-height:1.2;font-weight:550;margin:14px 0 10px}.archive-card p{font-size:15px;color:var(--muted);margin:10px 0 16px}.archive-meta{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--green)}.archive-action{display:inline-block;font-size:14px;color:var(--green);border-bottom:1px solid var(--green);padding-bottom:3px}.archive-card iframe{width:100%;aspect-ratio:16/9;border:0;margin:10px 0 12px;background:#e6e8e3}.archive-rows article{display:grid;grid-template-columns:170px 1fr auto;gap:22px;border-top:1px solid var(--line);padding:21px 0;align-items:start}.archive-rows h3{font-size:19px;font-weight:550;letter-spacing:-.03em;margin:0 0 6px}.archive-rows p{font-size:14px;color:var(--muted);margin:0}.event-history{display:grid;grid-template-columns:100px 1fr;gap:20px;border-top:1px solid var(--line);padding:20px 0}.event-history h3{margin:0;font-size:17px;font-weight:550}.event-history p{margin:0;line-height:1.9;color:var(--muted);font-size:15px}.source-note{font-size:12px;color:var(--muted);padding:28px 0}.navlinks{gap:22px}.navlinks a[aria-current=page]{color:var(--green);border-bottom:1px solid var(--green)}
@media(max-width:850px){.archive-grid{grid-template-columns:1fr 1fr}.archive-gallery img{height:210px}.navlinks{gap:16px}}
@media(max-width:650px){.archive-intro{padding:42px 0 28px}.archive-gallery{grid-template-columns:1fr;gap:18px}.archive-gallery img{height:auto;max-height:360px;object-fit:cover}.archive-grid{grid-template-columns:1fr}.archive-rows article{grid-template-columns:1fr;gap:8px}.event-history{grid-template-columns:65px 1fr;gap:12px}}
/* Readable editorial typography */
:root{--muted:#525a54;--line:#cdd2cc}
body{font-size:20px;line-height:1.6}
.nav{min-height:90px;height:auto;gap:30px;padding:20px 0}.brand{font-size:23px;white-space:nowrap}.navlinks{font-size:19px;gap:24px}.navlinks a{padding:8px 0}
.overline{font-size:15px}.role{font-size:clamp(24px,2.3vw,31px)}.intro{font-size:23px;line-height:1.55}.tag{font-size:16px;padding:8px 15px}.social{font-size:19px}
.section{padding:64px 0}.section-head{grid-template-columns:300px 1fr;gap:40px;margin-bottom:36px}.section-title{font-size:clamp(25px,2.6vw,32px);line-height:1.2;letter-spacing:-.035em;text-transform:none;font-weight:650;margin:0;color:var(--ink)}.section-note{font-size:20px;line-height:1.55}
.area{padding-top:32px;padding-bottom:34px}.area-index{font-size:15px}.area h3{font-size:clamp(28px,3vw,37px)}.area-tags{font-size:20px;gap:10px 18px}.events-link{font-size:20px;margin-top:20px;padding:8px 0}.background-line{font-size:clamp(23px,2.7vw,35px);line-height:1.5}
.archive-intro{max-width:1000px;padding:76px 0 50px}.archive-intro h1{font-size:clamp(56px,7.5vw,96px)}.archive-intro p{font-size:24px;line-height:1.5;max-width:790px}.archive-jump{font-size:20px;gap:28px}.archive-jump a{padding:8px 0}
.archive-gallery{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;margin-bottom:64px}.archive-gallery img{height:300px}.archive-gallery figcaption{margin-top:18px;color:var(--ink);font-size:23px;line-height:1.3}.archive-gallery figcaption strong{display:block;font-weight:600;letter-spacing:-.025em}.archive-gallery figcaption span{display:block;font-size:17px;color:var(--green);margin-top:10px;line-height:1.5}
.archive-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 40px}.archive-card{padding:28px 0}.archive-meta{font-size:15px;letter-spacing:.045em}.archive-card h3{font-size:clamp(28px,3vw,36px);line-height:1.2;margin:16px 0}.archive-card p{font-size:20px;line-height:1.5}.archive-action{font-size:19px;padding:7px 0}.archive-card iframe{margin:16px 0}
.archive-rows article{grid-template-columns:150px 1fr auto;padding:28px 0;gap:28px}.archive-rows h3{font-size:27px;margin-bottom:10px}.archive-rows p{font-size:19px;line-height:1.55}.event-history{padding:26px 0}.event-history h3{font-size:23px}.event-history p{font-size:20px;line-height:1.75}.source-note{font-size:16px}
a:focus-visible{outline:2px solid var(--green);outline-offset:5px}
@media(max-width:1180px){.nav{align-items:flex-start;flex-direction:column;gap:8px;padding:15px 0}.navlinks{flex-wrap:wrap;gap:10px 26px}.section-head{grid-template-columns:240px 1fr}.archive-rows article{grid-template-columns:130px 1fr}.archive-rows article>div:last-child{grid-column:2}.archive-gallery figcaption{font-size:21px}}
@media(max-width:850px){.archive-gallery img{height:230px}.section-head{grid-template-columns:1fr;gap:16px}.archive-card h3{font-size:28px}.archive-gallery{gap:18px}.area-tags{font-size:18px}}
@media(max-width:650px){body{font-size:18px}.navlinks{overflow:visible;white-space:normal;font-size:17px;gap:5px 19px;padding-bottom:0}.brand{font-size:22px}.nav{gap:6px}.hero{padding-top:42px}.role{font-size:24px}.intro{font-size:21px}.tag{font-size:15px}.section{padding:42px 0}.section-note{font-size:19px}.area h3{font-size:28px}.archive-intro{padding:44px 0 34px}.archive-intro h1{font-size:58px}.archive-intro p{font-size:21px}.archive-jump{font-size:18px;gap:12px 24px}.archive-gallery{grid-template-columns:1fr;gap:32px}.archive-gallery img{height:auto;max-height:340px}.archive-gallery figcaption{font-size:23px}.archive-grid{grid-template-columns:1fr;gap:12px}.archive-rows article{grid-template-columns:1fr;gap:10px}.archive-rows article>div:last-child{grid-column:auto}.archive-card p,.event-history p{font-size:19px}.archive-rows h3{font-size:25px}.background-line{font-size:25px}}
/* Compact page rhythm */
html{scroll-padding-top:110px}
.hero{min-height:0;padding:36px 0 40px;grid-template-columns:1.2fr .65fr;gap:48px;align-items:center}.portrait-wrap{max-width:350px}.portrait{max-height:520px;height:auto}.hero .overline{margin-bottom:20px}.hero h1{font-size:clamp(56px,6.8vw,88px);margin-bottom:20px}.hero .role{margin-bottom:18px}.hero .intro{margin-bottom:20px}.hero-tags{margin-bottom:22px}
.archive-intro{max-width:none;display:grid;grid-template-columns:1.1fr 1fr;gap:12px 48px;padding:32px 0 28px;align-items:center}.archive-intro>.overline{grid-column:1/-1;margin:0 0 4px}.archive-intro h1{font-size:clamp(48px,5.2vw,70px);margin:0;line-height:1.04}.archive-intro p{margin:0;max-width:600px;font-size:22px}.archive-jump{grid-column:1/-1;margin:8px 0 0;gap:24px}
.archive-gallery{margin-bottom:30px;gap:20px}.archive-gallery img{height:255px}.archive-gallery figcaption{margin-top:12px;font-size:22px}.archive-gallery figcaption span{margin-top:7px}
.section{padding:36px 0 40px}.section-head{margin-bottom:22px;gap:30px}.archive-card{padding:20px 0}.archive-grid{gap:12px 32px}.archive-rows article{padding:20px 0}.event-history{padding:18px 0}.area{padding-top:24px;padding-bottom:24px}
@media(max-width:850px){.hero{grid-template-columns:1fr .65fr;gap:28px}.portrait-wrap{max-width:290px}.portrait{max-height:435px}.hero h1{font-size:64px}.archive-intro{gap:14px 28px}.archive-intro p{font-size:20px}.archive-gallery img{height:200px}.archive-gallery figcaption{font-size:20px}}
@media(max-width:650px){.hero{grid-template-columns:1fr;padding:28px 0 30px;gap:24px}.hero h1{font-size:clamp(52px,13vw,70px)}.portrait-wrap{width:min(65%,250px);max-width:250px}.portrait{max-height:none}.archive-intro{display:block;padding:28px 0 24px}.archive-intro>.overline{margin-bottom:16px}.archive-intro h1{font-size:52px;margin-bottom:18px}.archive-intro p{font-size:20px}.archive-jump{margin-top:16px;gap:8px 20px}.archive-gallery{gap:24px;margin-bottom:24px}.archive-gallery img{height:auto;max-height:300px}.archive-gallery figcaption{font-size:22px}.section{padding:28px 0 32px}}
.initiative{display:flex;flex-direction:column}.initiative .archive-action{align-self:flex-start;margin-top:auto}.initiative p{margin-bottom:22px}.initiatives{gap:16px 40px}
/* Cobalt & Lime */
:root{--paper:#F7F9FC;--ink:#121826;--muted:#526071;--line:#D7DFEC;--green:#244DEB;--blue:#E8EEFF;--lime:#D3EF42}
header{background:#F7F9FC}.navlinks{color:var(--muted)}
.tag{background:var(--lime);border-color:var(--lime);color:var(--ink)}
.project.featured{background:var(--lime);border-color:var(--lime);color:var(--ink)}.project.ai{background:var(--blue);border-color:var(--blue);color:var(--ink)}
.area-tags{color:var(--muted)}.area-tags span+span:before{color:#8290A5}
.metric strong{color:var(--green)}.portrait{background:var(--paper)}
.archive-card iframe{background:#E8EEFF}.engagements img{background:#E8EEFF}
a:focus-visible{outline-color:var(--green)}
::selection{background:var(--lime);color:var(--ink)}
.project-github{display:flex;flex-wrap:wrap;gap:22px;margin-top:20px;font-size:19px;color:var(--green)}.project-github a{padding-bottom:4px;border-bottom:1px solid var(--green)}
.initiatives{gap:20px}.initiatives .initiative{background:#FFFFFF;border:1px solid var(--line);border-top:3px solid var(--green);border-radius:12px;padding:26px}.initiatives .initiative h3{margin-top:14px}.initiatives .initiative .archive-meta{font-size:14px}.initiatives .initiative p{font-size:19px}
.chainsafe-history>h2{font-size:24px;letter-spacing:-.025em;margin:0 0 8px;font-weight:600}.chainsafe-history>p{font-size:17px;color:var(--muted);margin:0 0 22px}.chainsafe-list{padding-left:22px;margin:0;max-width:1050px}.chainsafe-list li{font-size:17px;line-height:1.55;margin-bottom:15px;padding-left:5px}.chainsafe-list strong{font-size:18px;font-weight:600}.chainsafe-list span{color:var(--muted);margin-left:8px}.chainsafe-list a{color:var(--green);font-size:15px;white-space:nowrap;border-bottom:1px solid var(--green);margin-left:8px}
@media(max-width:650px){.initiatives .initiative{padding:22px}.project-github{font-size:18px;gap:18px}.chainsafe-list span{display:block;margin:3px 0 0}.chainsafe-list a{margin-left:0;display:inline-block;margin-top:3px}}
.flagship-program{display:grid;grid-template-columns:1.65fr 1fr;gap:40px;align-items:center;background:#E8EEFF;border:1px solid var(--line);border-top:4px solid var(--green);border-radius:12px;padding:32px;margin-bottom:28px}.flagship-copy h2{font-size:clamp(34px,4.2vw,52px);letter-spacing:-.045em;line-height:1.08;margin:16px 0}.flagship-copy p{font-size:22px;color:var(--muted);line-height:1.5;max-width:680px;margin:0 0 20px}.flagship-scale{border-left:1px solid #B8C8F3;padding-left:32px}.flagship-scale strong{display:block;font-size:86px;line-height:1;letter-spacing:-.055em;color:var(--green);font-weight:600}.flagship-scale span{display:block;font-size:20px;line-height:1.4;margin-top:14px;color:var(--ink)}
@media(max-width:650px){.flagship-program{grid-template-columns:1fr;padding:24px;gap:24px}.flagship-copy p{font-size:20px}.flagship-scale{border-left:0;border-top:1px solid #B8C8F3;padding:20px 0 0;display:flex;gap:20px;align-items:center}.flagship-scale strong{font-size:64px}.flagship-scale span{font-size:18px;margin:0}}
/* Navigation and responsive polish */
.skip-link{position:absolute;left:20px;top:-100px;z-index:20;background:var(--ink);color:#FFFFFF;padding:12px 16px;border-radius:6px;font-size:16px}.skip-link:focus{top:12px;color:#FFFFFF}
.nav-toggle{display:none}.navlinks a:last-child{color:inherit}.navlinks a[aria-current="page"]{color:var(--green);border-bottom:2px solid var(--green)}
.navlinks a,.social a,.project-github a,.archive-action,.events-link{min-height:44px;display:inline-flex;align-items:center}.navlinks a{padding:8px 0}
.hero-copy,.operations-block>div,.archive-intro>*{min-width:0}.archive-card,.usecase,.flagship-copy,.systems-side{min-width:0}
.social a,.project-github a{padding:6px 0}.archive-card iframe{display:block}.archive-card h3,.initiative h3{overflow-wrap:break-word}
.archive-gallery img,.event-proof img{border-radius:6px}.archive-gallery img{aspect-ratio:4/3;object-position:center}.archive-card:focus-within,.initiative:focus-within{outline:2px solid var(--green);outline-offset:4px}
@media(max-width:1000px){
html{scroll-padding-top:86px}
header .nav{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;min-height:64px;gap:0 16px;padding:10px 0}
header .brand{font-size:21px}
header .nav-toggle{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:76px;margin-left:auto;font:inherit;font-size:17px;background:transparent;color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:8px 14px}
header .navlinks{width:100%;justify-content:flex-start;gap:0;font-size:18px;white-space:normal;overflow:visible}
header.nav-ready .navlinks{display:none}
header.nav-ready .navlinks[data-open="true"]{display:flex;flex-direction:column;align-items:stretch;padding-top:12px}
header .navlinks a{padding:12px 0;min-height:48px;border-bottom:1px solid var(--line);width:100%}
header .navlinks a[aria-current="page"]{border-bottom:1px solid var(--line);font-weight:600}
}
@media(max-width:650px){
.archive-intro h1{font-size:clamp(39px,11.7vw,48px);line-height:1.08}
.operations-intro h1{font-size:clamp(39px,11.7vw,48px);line-height:1.08}
.archive-intro p,.operations-intro p{font-size:20px;line-height:1.5}
.archive-intro{padding:30px 0 24px}.operations-intro{padding:30px 0 28px}
.portrait-caption{display:none}
.archive-gallery img{height:auto;max-height:none;aspect-ratio:4/3;object-fit:cover}
.archive-gallery{gap:24px}.archive-jump a{min-height:44px;display:inline-flex;align-items:center}
.event-history{grid-template-columns:1fr;gap:8px}
.chainsafe-list a{min-height:44px;align-items:center}
}
.section-head:has(> h2:only-child){display:block}
</style></head><body><a class="skip-link" href="#main-content">Skip to content</a><header><div class="wrap nav"><a class="brand" href="index.html">Redwan Meslem</a><button class="nav-toggle" type="button" aria-controls="main-navigation" aria-expanded="false">Menu</button><nav id="main-navigation" class="navlinks" aria-label="Main navigation"><a href="index.html">Home</a><a href="projects.html#ethereum-initiatives">Ethereum & Institutions</a><a href="ai-operations.html">AI & Operations</a><a href="speaking-media.html">Speaking & Media</a><a href="projects.html" aria-current="page">Projects</a></nav></div></header><main class="wrap" id="main-content"><section class="archive-intro"><div class="overline">Projects</div><h1>Ethereum research.<br> Tools you can use.</h1><p>I build tools and research to help institutions adopt Ethereum, develop tokenization standards, connect agentic payments with Ethereum settlement, and understand the ecosystem.</p><div class="project-github"><a href="https://github.com/Redoudou" target="_blank" rel="noopener noreferrer">My GitHub ↗</a><a href="https://github.com/EntEthAlliance" target="_blank" rel="noopener noreferrer">EEA GitHub ↗</a></div></section><section class="section flagship-program" aria-label="Flagship program"><div class="flagship-copy"><span class="archive-meta">Flagship program</span><h2>Ethereum Intelligence</h2><p>Bringing institutions and their engineering teams together to translate Ethereum’s technical changes into product impact.</p><a class="archive-action" href="https://intelligence.entethalliance.org/" target="_blank" rel="noopener noreferrer">Explore the program ↗</a></div><div class="flagship-scale"><strong>4</strong><span>Major institutions participating<br> with their engineering teams</span></div></section><section class="section" id="ethereum-initiatives" aria-label="Tools and research I built"><div class="archive-grid initiatives"><article class="archive-card initiative"><span class="archive-meta">Policy intelligence</span><h3>Digital Asset Policy Tracker</h3><p>Track digital asset policy developments and their relevance to Ethereum and tokenization.</p><a class="archive-action" href="https://entethalliance.github.io/ops-policy-friday/" target="_blank" rel="noopener noreferrer">Explore the tracker ↗</a></article><article class="archive-card initiative"><span class="archive-meta">Research · Investor eligibility</span><h3>Shibui</h3><p>Open-source research on reusable investor eligibility for tokenized assets, using ERC-3643 and EAS.</p><a class="archive-action" href="https://hub.entethalliance.org/rnd-rwa-erc3643-eas/" target="_blank" rel="noopener noreferrer">Explore Shibui ↗</a></article><article class="archive-card initiative"><span class="archive-meta">Research · Agent payments</span><h3>Rialto</h3><p>Research connecting AP2 agent-payment authorization with Ethereum settlement.</p><a class="archive-action" href="https://hub.entethalliance.org/rialto-ap2-eth/" target="_blank" rel="noopener noreferrer">Explore Rialto ↗</a></article><article class="archive-card initiative"><span class="archive-meta">Protocol intelligence</span><h3>The EIP Matrix</h3><p>Explore Ethereum proposals and their implications for product design, infrastructure, cost and risk.</p><a class="archive-action" href="https://intelligence.entethalliance.org/eip-matrix.html" target="_blank" rel="noopener noreferrer">Open the matrix ↗</a></article><article class="archive-card initiative"><span class="archive-meta">Cost modeling</span><h3>Ethereum Gas Fee Calculator</h3><p>Model how proposed EIP-2780 changes could affect recurring Ethereum L1 transaction costs.</p><a class="archive-action" href="https://intelligence.entethalliance.org/gas-simulator.html" target="_blank" rel="noopener noreferrer">Try the calculator ↗</a></article><article class="archive-card initiative"><span class="archive-meta">Network landscape</span><h3>The Trellis</h3><p>Compare Ethereum rollups and other networks using source-linked TVL and stablecoin data.</p><a class="archive-action" href="https://hub.entethalliance.org/ops-finance/trellis/index.html" target="_blank" rel="noopener noreferrer">Explore the networks ↗</a></article><article class="archive-card initiative"><span class="archive-meta">Ecosystem landscape</span><h3>Ethereum Atlas</h3><p>Map who shapes Ethereum upgrades, how decisions move forward and where institutions can participate.</p><a class="archive-action" href="https://intelligence.entethalliance.org/atlas.html" target="_blank" rel="noopener noreferrer">Explore the landscape ↗</a></article></div></section><section class="section"><div class="section-head"><h2 class="section-title">Governance</h2></div><div class="archive-grid"><article class="archive-card"><span class="archive-meta">Governance</span><h3>Ethereum Governance Futures</h3><p>A project exploring how Ethereum makes decisions.</p><a class="archive-action" href="https://redoudou.github.io/Ethereum-Governance-Futures/" target="_blank" rel="noopener noreferrer">Explore ↗</a></article></div></section><section class="section chainsafe-history"><h2>Earlier work at ChainSafe</h2><p>Projects I led as a product manager, working with engineering teams.</p><ul class="chainsafe-list"><li><strong>web3.js</strong><span>Ethereum libraries and developer tooling for applications interacting with the Ethereum JSON-RPC API.</span> <a href="https://github.com/web3/web3.js" target="_blank" rel="noopener noreferrer" aria-label="web3.js repository">Code ↗</a></li><li><strong>Polkadot Index Network Token (PINT)</strong><span>Index infrastructure for the Polkadot ecosystem, with a treasury supporting parachain auctions.</span> <a href="https://github.com/ChainSafe/PINT" target="_blank" rel="noopener noreferrer" aria-label="Polkadot Index Network Token (PINT) repository">Code ↗</a></li><li><strong>Filecoin Substrate Bridge</strong><span>A bridge connecting Filecoin with Substrate-based networks.</span> <a href="https://github.com/ChainSafe/filecoindot" target="_blank" rel="noopener noreferrer" aria-label="Filecoin Substrate Bridge repository">Code ↗</a></li><li><strong>Near MetaMask Snap</strong><span>A MetaMask Snap bringing Near network functionality into the wallet.</span> <a href="https://github.com/ChainSafe/near-snap" target="_blank" rel="noopener noreferrer" aria-label="Near MetaMask Snap repository">Code ↗</a></li><li><strong>The Graph Arweave Integration</strong><span>An implementation connecting Arweave data with The Graph.</span> <a href="https://github.com/graphprotocol/thegarii" target="_blank" rel="noopener noreferrer" aria-label="The Graph Arweave Integration repository">Code ↗</a></li><li><strong>API3 in Rust</strong><span>Porting API3 smart-contract functionality to Rust for networks including Solana and Near.</span> <a href="https://github.com/ChainSafe/api3-rust" target="_blank" rel="noopener noreferrer" aria-label="API3 in Rust repository">Code ↗</a></li><li><strong>Polywrap SDK for Substrate</strong><span>Integration work connecting Polywrap with the Substrate ecosystem.</span> <a href="https://github.com/ChainSafe/integrations" target="_blank" rel="noopener noreferrer" aria-label="Polywrap SDK for Substrate repository">Code ↗</a></li><li><strong>Zcash Web Wallet Feasibility</strong><span>Research into the feasibility of a Zcash web wallet.</span></li><li><strong>Token Drop via Dune & The Graph</strong><span>Token distribution tooling using Dune and The Graph.</span></li><li><strong>W-OTS+ for XXNetwork</strong><span>Work on W-OTS+ cryptographic primitives for XXNetwork.</span></li></ul></section></main>
<script>
(()=>{const header=document.querySelector('header');const toggle=header.querySelector('.nav-toggle');const nav=header.querySelector('.navlinks');
header.classList.add('nav-ready');
const setOpen=open=>{nav.dataset.open=String(open);toggle.setAttribute('aria-expanded',String(open));toggle.textContent=open?'Close':'Menu';};
toggle.addEventListener('click',()=>setOpen(toggle.getAttribute('aria-expanded')!=='true'));
nav.addEventListener('click',event=>{if(event.target.closest('a'))setOpen(false);});
document.addEventListener('keydown',event=>{if(event.key==='Escape' && toggle.getAttribute('aria-expanded')==='true'){setOpen(false);toggle.focus();}});
})();
</script>
</body></html>