A curated collection of academic papers in cybersecurity (and adjacent fields), sorted by venue and year, deployed via GitHub Pages.
Visit the website at sec.c01dkit.com
Pull requests and issues are warmly welcomed.
Top-tier security ("the Big Four"):
- IEEE S&P (Oakland)
- USENIX Security Symposium (USENIX Sec)
- ACM CCS
- NDSS
Software-engineering venues with security-relevant content:
- ICSE
- ISSTA
- FSE
- ASE
System venues:
- ASPLOS
- SOSP
- OSDI
The site is an Astro static site, prerendered per language (/zh/ and /en/) and deployed at sec.c01dkit.com. From the top navigation bar you can reach:
- Home — a scroll-revealed landing page: hero with live paper/venue/year stats, a coverage matrix (10 venues × 12 years, shaded by yearly accepted-paper count), and one feature block per core page (search, trends, abstracts, submission timeline, awards).
- Search — full title search across all included papers, filter by venue and year, click a row to copy the title, click the paperclip to open the paper, click the star to favorite. A "Favorites Only" toggle filters to your starred entries. The first 30 rows are prerendered at build time, so the page stays readable and filterable even if the CDN is unreachable.
- Trends — yearly accepted-paper trend charts grouped by category (top-tier, software engineering, system).
- Abstract — pick a venue and year to read accepted papers with their abstracts, with the user's preferred keywords highlighted in the accent color.
- Submission Timeline — full submission/notification/camera-ready timeline for each Big-Four venue, kept in sync with the official CFPs.
- Awards — best-paper / distinguished-paper awards across years, grouped by year or by award type.
- About — changelog, list of supporters, and a "Support & Feedback" section (donation links, GitHub issues, feedback form).
- More Sites — curated links to related resources (best-paper-awards aggregators, CCF deadlines, Connected Papers, WisPaper, CS Papers, etc.).
- Settings — theming and personal preferences (see below).
All preferences are persisted in your browser's IndexedDB only — nothing is uploaded.
- Light / dark mode toggle, accent color picker (4 curated colors).
- Language toggle: English / 中文.
- Remember-preference switches for language, dark mode, and accent color.
- Preferred keywords for highlighting in Search and Abstract pages.
- Paper favorites stored locally; surfaced in the Search page.
analyzers/ Python crawl/parse/LLM analysis modules
cache/ pickled crawl cache (SHA-256 keyed; see cache.zip)
official_cache/ official CSV/BIB files from venues
src/assets/data/ generated JSON consumed by the frontend
data.json full paper list (no abstracts, for size)
data-quick-view.json 100 latest papers per publication
data-statistics.json aggregated counts by publication / year / category
meta_json/<Pub>-<Yr>.json per-conference details with abstracts
src/pages/ Astro pages ([lang]/*.astro prerendered per language)
src/lib/ pure-function modules (papers, highlight, coverage, settings-schema, ...)
src/scripts/ browser-side controllers, incl. settings-store.js (IndexedDB + localStorage)
src/i18n/ zh.json / en.json + index.js (t() throws on a missing key)
data.yml master config (venues, years, XPaths, official files)
main.py orchestrator entry point
Paper data is processed via uv. Clone the repo, edit data.yml, run uv run main.py --analyze locally to verify, and open a pull request. All contributors will be credited in the repository and on the website's About page.
uv sync # set up the Python environment
# ...edit data.yml...
uv run main.py --analyze # crawl/parse and regenerate JSON in src/assets/data/To speed up local crawling, unzip cache.zip into the repo root so the cached HTML/JSON is reused.
- Since v0.3.6, the
statuskeyword indata.ymlmarks each conference's processing state for maintainers:notchecked(default) /inprogress/done/advanced(LLM-analyzed). It is no longer surfaced on the site itself as of v0.4.0. - Awards and the submission timeline are hand-maintained JSON, not generated by
--analyze:src/assets/data/awards.jsonandsrc/assets/data/submission-timeline.jsonare the two files undersrc/assets/data/that are not git-ignored (see.gitignore) — edit them directly. The changelog and supporter/sponsor list live insrc/data/changelog.js; the "More Sites" links live insrc/data/sites.js. Edit those directly to publish news.
uv run main.py --llm-analyze reads paper abstracts and tags topics via an OpenAI-compatible API. Configure it via a local .env:
OPENAI_API_KEY=...
MODEL=...
BASE_URL=...
PRIVATE_ZIP_PASSWD=... # password for cache.zip
Results are cached as JSONL to avoid re-querying.
Some venues (e.g., recent IEEE Xplore exports for Oakland) ship .bib files where each entry's cite key is empty (@INPROCEEDINGS {,). bibtexparser cannot parse those, so run:
uv run analyzers/bib_analyzer.py official_cache/<file>.bibThis rewrites empty cite keys with random UUIDs in place. Cite keys are not used downstream — only title, author, abstract, and url are consumed.
npm install
npm run dev # Astro dev server
npm run build # production build → dist/
npm run preview # preview the build
npm run check # astro check
npm test # vitest run
npm run deploy # publish dist/ to GitHub Pages (--cname sec.c01dkit.com)The site is Astro with hand-written CSS — no UI framework, no Tailwind. Charts are Chart.js.
uv run main.py --analyze --upload
npm run deploy # update package.json's --cname if you fork this
git add .
git commit -m "update $DATE"
git push origin main