2 views

Crosstalk-Solutions/project-nomad

Project NOMAD is an offline-first knowledge and education server. Wikipedia, thousands of books, courses, maps, and optional local AI, all running on hardware you own with no internet required.

TypeScript★ 37,960+394 that day#9 on trending

Analyzed September 22, 2026 at 85da928 (main) with jscpd 5.4.0 in 0.2s. Code duplication stayed at 1.97% across 2 appearances since Sep 15.

E25.1/100
Project health69,412 lines of code (M)
Duplication86
1.7% in typescript, tsx, bash, python, perl
Dead code3
37.8%
Complexity51
48.7%

The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.

1.97%duplicated code · 1,243 of 63,012 lines
92clones in code
350code files of 472 scanned
1.9%duplicated over all files · 107 clones

The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 3 generated files: admin/app/data/conditions.ts, admin/app/data/home_remedies.ts, admin/app/data/natural_remedies.ts.

Largest clones in the code

  • 20 lines in 2 placestsx240 tokens
    480{installedServices.map((service) => (
    481  <AppCard
    482    key={service.service_name}
    483    service={service}
    484    openDropdown={openDropdown}
    485    dropdownRef={dropdownRef}
    486    onOpenDropdown={setOpenDropdown}
    487    onInstall={() => setModal({ type: 'install', service })}
    488    onStart={() => setModal({ type: 'start', service })}
    489    onStop={() => setModal({ type: 'stop', service })}
    

    First 10 of 20 lines.

  • 23 lines in 2 placestypescript219 tokens
    74friendly_name: vine.string().trim().minLength(1).maxLength(100),
    75image: vine.string().trim().minLength(1),
    76ports: vine
    77  .array(
    78    vine.object({
    79      container: vine.number().min(1).max(65535),
    80      host: vine.number().min(1024).max(65535),
    81    })
    82  )
    83  .optional(),
    

    First 10 of 23 lines.

  • 23 lines in 2 placestypescript151 tokens
    205  const got = isWithinWindow(c.start, c.end, DateTime.fromISO(c.at))
    206  const ok = got === c.expect
    207  this.report(ok, `${c.name} (expected ${c.expect}, got ${got})`)
    208  ok ? passed++ : failed++
    209}
    210
    211this.logger.log('')
    212if (failed === 0) {
    213  this.logger.success(`All ${passed} scenarios passed`)
    214} else {
    

    First 10 of 23 lines.

7 more
Largest clones over all files, tests and data included
By format, code only
FormatFilesLinesClonesDuplicated linesDuplication
typescript20737,988719212.42%
tsx12021,925172341.07%
bash212,7304883.22%
python1195000%
perl1174000%
By format, all files
FormatFilesLinesClonesDuplicated linesDuplication
typescript28344,314779882.23%
tsx12121,955172341.07%
yaml12916612113.21%
bash232,7555923.34%
markdown193,2842170.52%
json92,306000%
markup1497000%
python1195000%
perl1174000%
css1158000%

Trending appearances

DayRankStarsFilesLinesClonesAll filesCodeHealthCommit
Sep 22, 2026#937,960 (+394)47276,5591071.9%1.97%E 25.185da928
Sep 15, 2026#1237,007 (+40)47276,5591071.9%1.97%—85da928

Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.