Skip to content

Commit 98162a8

Browse files
site: publish evolving-data research portfolio (#6)
1 parent 4ac7935 commit 98162a8

4 files changed

Lines changed: 136 additions & 1 deletion

File tree

‎assets/research-portfolio.js‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
(() => {
2+
const container = document.querySelector("[data-research-portfolio]");
3+
if (!container) return;
4+
5+
const status = container.querySelector("[data-research-status]");
6+
const source = container.dataset.source;
7+
8+
const addText = (parent, className, text, element = "span") => {
9+
const node = document.createElement(element);
10+
node.className = className;
11+
node.textContent = text;
12+
parent.append(node);
13+
return node;
14+
};
15+
16+
fetch(source)
17+
.then((response) => {
18+
if (!response.ok) throw new Error(`portfolio request failed: ${response.status}`);
19+
return response.json();
20+
})
21+
.then((manifest) => {
22+
if (manifest.schema_version !== 1 || !Array.isArray(manifest.projects)) {
23+
throw new Error("unsupported research portfolio manifest");
24+
}
25+
26+
const fragment = document.createDocumentFragment();
27+
manifest.projects.forEach((project) => {
28+
const card = document.createElement(project.url ? "a" : "article");
29+
card.className = `research-card${project.url ? "" : " is-unlinked"}`;
30+
if (project.url) card.href = project.url;
31+
32+
const head = document.createElement("div");
33+
head.className = "research-card-head";
34+
addText(head, "research-card-code", project.code);
35+
addText(head, "research-card-stage", project.stage);
36+
card.append(head);
37+
addText(card, "", project.name, "h3");
38+
addText(card, "", project.summary, "p");
39+
addText(card, "research-card-role", project.role);
40+
fragment.append(card);
41+
});
42+
43+
container.replaceChildren(fragment);
44+
})
45+
.catch((error) => {
46+
status.textContent = "The research portfolio could not be loaded. Open the versioned manifest for the current record.";
47+
status.title = error.message;
48+
});
49+
})();

‎data/research-portfolio.json‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
{
2+
"schema_version": 1,
3+
"projects": [
4+
{
5+
"code": "SEMANTIC",
6+
"name": "Semantic-MR",
7+
"url": null,
8+
"role": "Semantic and graph processing",
9+
"summary": "Deterministic semantic aggregation over telemetry and evolving records.",
10+
"stage": "PRIVATE INCUBATION"
11+
},
12+
{
13+
"code": "LINK",
14+
"name": "Wiki-Link Retrieval",
15+
"url": "https://github.com/RIDE-Lab/wiki-link-retrieval",
16+
"role": "Semantic and graph processing",
17+
"summary": "Graph-backed retrieval over evolving linked corpora with reproducible corpus and query provenance.",
18+
"stage": "PUBLIC INCUBATION"
19+
},
20+
{
21+
"code": "ANNS",
22+
"name": "NewGammaFresh",
23+
"url": "https://github.com/intellistream/NewGammaFresh",
24+
"role": "Dynamic vector indexes",
25+
"summary": "Continuous ANNS under update and query pressure, including delete absorption and rebuild boundaries.",
26+
"stage": "PRIVATE INCUBATION"
27+
},
28+
{
29+
"code": "TIME",
30+
"name": "TA-RAG",
31+
"url": "https://github.com/intellistream/TA-RAG",
32+
"role": "Temporal retrieval",
33+
"summary": "Time-aware retrieval contracts, temporal splits, baselines, and reproducible evaluation.",
34+
"stage": "PRIVATE INCUBATION"
35+
},
36+
{
37+
"code": "LIFECYCLE",
38+
"name": "Temporal RAG",
39+
"url": "https://github.com/intellistream/sage-temporal-memory",
40+
"role": "Temporal data lifecycle",
41+
"summary": "Temporal visibility, versions, updates, expiry semantics, and matched retrieval evaluation.",
42+
"stage": "PRIVATE INCUBATION"
43+
},
44+
{
45+
"code": "GRAPH",
46+
"name": "GRACE",
47+
"url": "https://github.com/DataSysResearch/GRACE",
48+
"role": "Dynamic graph systems",
49+
"summary": "Property-guided reconstruction and rebalancing for efficient dynamic graph processing.",
50+
"stage": "GRADUATED"
51+
},
52+
{
53+
"code": "BENCH",
54+
"name": "BriskSeed",
55+
"url": "https://github.com/DataSysResearch/CANDOR-Bench/tree/BriskSeed",
56+
"role": "Continuous ANNS evaluation",
57+
"summary": "A governed CANDOR-Bench research branch for continuous ANNS seeding and evaluation.",
58+
"stage": "GRADUATED BRANCH"
59+
}
60+
]
61+
}

‎index.html‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
</a>
2121
<nav aria-label="Primary navigation">
2222
<a href="#flagships">Flagships</a>
23+
<a href="#research-portfolio">Research</a>
2324
<a href="./achievements.html">Achievements</a>
2425
<a href="./members.html">Members</a>
2526
<a href="#directory">Repository atlas</a>
@@ -29,7 +30,7 @@
2930
</header>
3031
<nav class="mobile-nav" aria-label="Mobile navigation">
3132
<a class="active" href="#top">Overview</a>
32-
<a href="#flagships">Flagships</a>
33+
<a href="#research-portfolio">Research</a>
3334
<a href="./achievements.html">Papers</a>
3435
<a href="./members.html">Members</a>
3536
<a href="https://github.com/DataSysResearch">GitHub <span aria-hidden="true">↗</span></a>
@@ -117,6 +118,16 @@ <h3>Sesame</h3>
117118
</div>
118119
</section>
119120

121+
<section class="section research-portfolio" id="research-portfolio">
122+
<div class="section-head">
123+
<div><p class="eyebrow">Evolving-data research</p><h2>Seven questions. One data-systems home.</h2></div>
124+
<p>These projects study framework-neutral processing, retrieval, indexing, temporal state, and evaluation. Incubating projects retain their current repositories and access boundaries until they satisfy the DataSys graduation contract.</p>
125+
</div>
126+
<div class="research-grid" data-research-portfolio data-source="./data/research-portfolio.json">
127+
<p class="research-status" data-research-status>Loading the research portfolio…</p>
128+
</div>
129+
</section>
130+
120131
<section class="section directory" id="directory">
121132
<div class="section-head">
122133
<div><p class="eyebrow">Repository atlas</p><h2>Organized by technical role.</h2></div>
@@ -187,6 +198,7 @@ <h3>Sesame</h3>
187198
<div><strong>DataSys</strong><span>Open systems for evolving data.</span></div>
188199
<nav aria-label="Footer navigation"><a href="./achievements.html">Achievements</a><a href="https://github.com/DataSysResearch">GitHub</a><a href="https://github.com/DataSysResearch/.github/blob/main/SECURITY.md">Security</a><a href="https://github.com/DataSysResearch/.github/blob/main/CONTRIBUTING.md">Contribute</a></nav>
189200
</footer>
201+
<script src="assets/research-portfolio.js"></script>
190202
<script src="app.js"></script>
191203
</body>
192204
</html>

‎styles.css‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,18 @@ h1 { margin: 0; font-size: clamp(72px, 11vw, 166px); line-height: .82; }
134134
.flagship .open { margin-top: auto; padding-top: 28px; color: var(--green); font-size: 13px; font-weight: 800; }
135135

136136
.directory { background: var(--paper); }
137+
.research-portfolio { background: #e8efea; }
138+
.research-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); border-top: 1px solid var(--line); border-left: 1px solid var(--line); }
139+
.research-card { min-height: 230px; padding: 24px; display: flex; flex-direction: column; gap: 14px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); background: rgba(255,255,255,.52); text-decoration: none; }
140+
.research-card:hover { background: var(--white); box-shadow: inset 0 4px var(--green); }
141+
.research-card.is-unlinked { cursor: default; }
142+
.research-card.is-unlinked:hover { background: rgba(255,255,255,.52); box-shadow: none; }
143+
.research-card-head { display: flex; justify-content: space-between; gap: 16px; align-items: start; }
144+
.research-card-code, .research-card-stage { color: var(--muted); font: 10px ui-monospace, SFMono-Regular, Menlo, monospace; text-transform: uppercase; }
145+
.research-card h3 { margin: 18px 0 0; font-size: 24px; }
146+
.research-card p { margin: 0; color: var(--muted); }
147+
.research-card-role { margin-top: auto; color: #527616; font-size: 12px; font-weight: 800; }
148+
.research-status { grid-column: 1 / -1; margin: 0; padding: 28px; color: var(--muted); }
137149
.filterbar { margin-bottom: 20px; display: flex; gap: 7px; flex-wrap: wrap; }
138150
.filter { min-height: 40px; padding: 8px 13px; color: var(--muted); background: transparent; border: 1px solid var(--line); border-radius: 4px; font-size: 13px; font-weight: 800; cursor: pointer; }
139151
.filter span { margin-left: 6px; color: inherit; opacity: .7; }
@@ -218,6 +230,7 @@ footer span, footer nav { color: #82918f; }
218230
.hero { align-content: end; }
219231
.scope-rail { grid-template-columns: repeat(3,minmax(0,1fr)); }
220232
.flagship-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
233+
.research-grid { grid-template-columns: 1fr; }
221234
.baseline-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
222235
.architecture { grid-template-columns: repeat(2,minmax(0,1fr)); }
223236
.member-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }

0 commit comments

Comments
 (0)