Skip to content

Commit 7cd8865

Browse files
chore: global rename from neuro-notes to neurolib
1 parent 7a5fc69 commit 7cd8865

7 files changed

Lines changed: 87 additions & 127 deletions

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Contributing to Neuro Note Macros
1+
# Contributing to neurolib
22

33
Thanks for considering a contribution. This project is a clinical documentation aid used by working clinicians, so the bar for changes — especially to clinical content — is higher than a typical web project.
44

DISCLAIMER.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Medical Disclaimer
22

3-
**Neuro Note Macros is a clinical documentation aid. It is not a medical device.**
3+
**neurolib is a clinical documentation aid. It is not a medical device.**
44

55
## Not a medical device
66

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# Neuro Note Macros
1+
# neurolib
22

3-
![Neuro Note Macros Hero](./public/hero-bg.png)
3+
![neurolib Hero](./public/hero-bg.png)
44

55
A clinical documentation aid for neurology. Copy-paste dot phrase templates and an NIHSS calculator, running entirely in your browser as a static web app.
66

77
> **Clinical documentation aid only — not a medical device.** Read `DISCLAIMER.md` before use. Verify every score and generated text against the patient before entering into the medical record. Do not enter PHI into this application.
88
9-
**Live demo:** https://fayerman-source.github.io/neuro-notes/
9+
**Live demo:** https://fayerman-source.github.io/neurolib/
1010

1111
## Features
1212

next.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { NextConfig } from "next";
22

33
const isGithubPages = process.env.GITHUB_PAGES === "true";
4-
const repo = "neuro-notes";
4+
const repo = "neurolib";
55

66
const nextConfig: NextConfig = {
77
output: "export",

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
{
2-
"name": "neuro-notes",
2+
"name": "neurolib",
33
"version": "0.1.0",
44
"private": true,
55
"description": "Neurology dot phrases and NIHSS calculator — a static clinical documentation aid.",
66
"author": "Eli Fayerman",
77
"license": "MIT",
88
"repository": {
99
"type": "git",
10-
"url": "https://github.com/fayerman-source/neuro-notes.git"
10+
"url": "https://github.com/fayerman-source/neurolib.git"
1111
},
12-
"homepage": "https://github.com/fayerman-source/neuro-notes#readme",
12+
"homepage": "https://github.com/fayerman-source/neurolib#readme",
1313
"bugs": {
14-
"url": "https://github.com/fayerman-source/neuro-notes/issues"
14+
"url": "https://github.com/fayerman-source/neurolib/issues"
1515
},
1616
"scripts": {
1717
"dev": "next dev",

src/app/layout.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "./globals.css";
55
const inter = Inter({ subsets: ["latin"] });
66

77
export const metadata: Metadata = {
8-
title: "Neuro Note Macros | Neurology Dot Phrases & NIHSS Calculator",
8+
title: "neurolib | Neurology Dot Phrases & NIHSS Calculator",
99
description: "Copy-paste neurology documentation templates. Includes NIHSS calculator, stroke scales, and 15+ dot phrases for EHR documentation.",
1010
keywords: ["neurology", "dot phrases", "NIHSS", "stroke", "medical documentation", "EHR", "smart phrases"],
1111
};
@@ -17,7 +17,18 @@ export default function RootLayout({
1717
}>) {
1818
return (
1919
<html lang="en">
20-
<body className={`${inter.className} bg-[#0B0F1A] text-white`}>
20+
<body className={`${inter.className} bg-[#0B0F1A] text-white relative m-0 p-0`}>
21+
<div
22+
className="fixed left-0 right-0 z-[-1] opacity-25 grayscale-[0.2] pointer-events-none h-[80vh]"
23+
style={{
24+
top: 0,
25+
backgroundImage: 'url("/hero-bg.png")',
26+
backgroundSize: 'cover',
27+
backgroundPosition: 'top center',
28+
maskImage: 'linear-gradient(to bottom, black 60%, transparent 100%)',
29+
WebkitMaskImage: 'linear-gradient(to bottom, black 60%, transparent 100%)',
30+
}}
31+
/>
2132
<div className="flex flex-col min-h-screen">
2233
<div className="flex-1">{children}</div>
2334
<footer

src/app/page.tsx

Lines changed: 64 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -25,159 +25,108 @@ export default function Home() {
2525
}, [activeCategory, searchQuery]);
2626

2727
return (
28-
<div>
28+
<div className="min-h-screen">
2929
<a
3030
href="#main-content"
3131
className="sr-only focus:not-sr-only focus:absolute focus:top-2 focus:left-2 focus:z-50 focus:px-4 focus:py-2 focus:bg-[#4F6EF7] focus:text-white focus:rounded-lg focus:font-medium"
3232
>
3333
Skip to main content
3434
</a>
35-
<header
36-
className="sticky top-0 z-50"
37-
style={{
38-
backdropFilter: 'blur(12px)',
39-
background: 'rgba(10, 15, 30, 0.85)',
40-
borderBottom: '1px solid rgba(255, 255, 255, 0.06)',
41-
}}
42-
>
43-
<div className="max-w-6xl mx-auto px-4 py-4">
44-
<div className="flex items-center justify-between mb-4">
45-
<div className="flex items-center gap-3">
46-
<div
47-
className="w-10 h-10 rounded-xl flex items-center justify-center"
48-
style={{
49-
background: 'linear-gradient(135deg, #4F6EF7, #7B5EA7)',
50-
boxShadow: '0 4px 12px rgba(79, 110, 247, 0.4)',
51-
}}
52-
>
53-
<svg className="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
54-
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" />
55-
</svg>
56-
</div>
57-
<div>
58-
<h1 className="text-xl font-bold" style={{ color: '#F8FAFC' }}>Neuro Note Macros</h1>
59-
<p className="text-xs" style={{ color: 'rgba(255, 255, 255, 0.45)' }}>Neurology dot phrases & templates</p>
60-
</div>
61-
</div>
62-
<button
63-
onClick={() => setShowNIHSS(!showNIHSS)}
64-
className="flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition-all"
35+
36+
{/* Top Section - Navigation and Identity */}
37+
<div className="max-w-6xl mx-auto px-4 pt-8 pb-12">
38+
<div className="flex items-center justify-between">
39+
<div className="flex items-center gap-3">
40+
<div
41+
className="w-10 h-10 rounded-xl flex items-center justify-center"
6542
style={{
66-
border: showNIHSS ? 'none' : '1px solid #4F6EF7',
67-
color: showNIHSS ? 'white' : '#7C9FFF',
68-
background: showNIHSS
69-
? 'linear-gradient(135deg, #4F6EF7, #7B5EA7)'
70-
: 'rgba(79, 110, 247, 0.08)',
71-
boxShadow: showNIHSS
72-
? '0 4px 12px rgba(79, 110, 247, 0.4)'
73-
: 'none',
43+
background: 'linear-gradient(135deg, #4F6EF7, #7B5EA7)',
44+
boxShadow: '0 4px 12px rgba(79, 110, 247, 0.4)',
7445
}}
7546
>
76-
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
77-
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z" />
47+
<svg className="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
48+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" />
7849
</svg>
79-
NIHSS Calculator
80-
</button>
81-
</div>
82-
83-
<div className="flex flex-col md:flex-row gap-4">
84-
<div className="flex-1">
85-
<SearchBar onSearch={setSearchQuery} />
50+
</div>
51+
<div>
52+
<h1 className="text-xl font-bold tracking-tight text-[#F8FAFC]">neurolib</h1>
53+
<p className="text-xs text-white/45">High-performance neurology templates</p>
8654
</div>
8755
</div>
88-
89-
<div className="mt-4" style={{ borderBottom: '1px solid rgba(255, 255, 255, 0.05)' }}>
90-
<CategoryNav activeCategory={activeCategory} onCategoryChange={setActiveCategory} />
91-
</div>
56+
<button
57+
onClick={() => {
58+
setShowNIHSS(!showNIHSS);
59+
if (!showNIHSS) {
60+
window.scrollTo({ top: 0, behavior: 'smooth' });
61+
}
62+
}}
63+
className="flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition-all hover:scale-[1.02] active:scale-[0.98]"
64+
style={{
65+
border: showNIHSS ? 'none' : '1px solid rgba(79, 110, 247, 0.4)',
66+
color: showNIHSS ? 'white' : '#7C9FFF',
67+
background: showNIHSS
68+
? 'linear-gradient(135deg, #4F6EF7, #7B5EA7)'
69+
: 'rgba(79, 110, 247, 0.08)',
70+
boxShadow: showNIHSS
71+
? '0 4px 12px rgba(79, 110, 247, 0.4)'
72+
: 'none',
73+
}}
74+
>
75+
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
76+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z" />
77+
</svg>
78+
NIHSS Calculator
79+
</button>
9280
</div>
93-
</header>
81+
</div>
9482

95-
<section className="relative overflow-hidden border-b border-white/5">
96-
<div
97-
className="absolute inset-0 z-0 opacity-40 grayscale-[0.2]"
98-
style={{
99-
backgroundImage: 'url("/hero-bg.png")',
100-
backgroundSize: 'cover',
101-
backgroundPosition: 'center',
102-
}}
103-
/>
104-
<div className="absolute inset-0 z-10 bg-gradient-to-b from-[#0B0F1A]/80 via-[#0B0F1A]/40 to-[#0B0F1A]" />
105-
106-
<div className="relative z-20 max-w-6xl mx-auto px-4 py-20 md:py-32">
107-
<div className="max-w-2xl">
108-
<h2 className="text-4xl md:text-5xl font-bold tracking-tight mb-6" style={{ color: '#F8FAFC' }}>
109-
Neurology documentation, <br />
110-
<span className="text-transparent bg-clip-text bg-gradient-to-r from-[#4F6EF7] to-[#7B5EA7]">
111-
reimagined for clinical flow.
112-
</span>
113-
</h2>
114-
<p className="text-lg mb-8 leading-relaxed" style={{ color: 'rgba(255, 255, 255, 0.6)' }}>
115-
A high-performance library of dot phrases and clinical calculators.
116-
Designed for neurologists and stroke teams who value precision and speed.
117-
Private, local-first, and always open source.
118-
</p>
119-
<div className="flex flex-wrap gap-4">
120-
<button
121-
onClick={() => {
122-
const el = document.getElementById('main-content');
123-
el?.scrollIntoView({ behavior: 'smooth' });
124-
}}
125-
className="px-6 py-3 rounded-xl font-semibold transition-all hover:scale-[1.02] active:scale-[0.98]"
126-
style={{
127-
background: 'linear-gradient(135deg, #4F6EF7, #7B5EA7)',
128-
color: 'white',
129-
boxShadow: '0 4px 20px rgba(79, 110, 247, 0.3)',
130-
}}
131-
>
132-
Browse Templates
133-
</button>
134-
<button
135-
onClick={() => setShowNIHSS(true)}
136-
className="px-6 py-3 rounded-xl font-semibold transition-all border border-white/10 hover:bg-white/5"
137-
style={{ color: '#F8FAFC' }}
138-
>
139-
Launch NIHSS
140-
</button>
141-
</div>
83+
{/* Primary Action Area - Search and Categories */}
84+
<div
85+
className="sticky top-0 z-50 border-y border-white/5"
86+
style={{
87+
backdropFilter: 'blur(16px)',
88+
background: 'rgba(11, 15, 26, 0.7)',
89+
}}
90+
>
91+
<div className="max-w-6xl mx-auto px-4 py-6">
92+
<div className="max-w-3xl mx-auto space-y-6">
93+
<SearchBar onSearch={setSearchQuery} />
94+
<CategoryNav activeCategory={activeCategory} onCategoryChange={setActiveCategory} />
14295
</div>
14396
</div>
144-
</section>
97+
</div>
14598

146-
<main id="main-content" className="max-w-6xl mx-auto px-4 py-6">
99+
<main id="main-content" className="max-w-6xl mx-auto px-4 py-8">
147100
{showNIHSS && (
148-
<div className="mb-8 animate-slide-down">
101+
<div className="mb-12 animate-slide-down">
149102
<NIHSSCalculator />
150103
</div>
151104
)}
152105

153-
<div className="mb-4 flex items-center justify-end">
106+
<div className="mb-6 flex items-center justify-end">
154107
<p
155-
className="text-xs uppercase tracking-wider"
156-
style={{ color: 'rgba(255, 255, 255, 0.3)' }}
108+
className="text-[10px] uppercase tracking-widest font-semibold text-white/20"
157109
aria-live="polite"
158110
>
159111
{filteredPhrases.length} template{filteredPhrases.length !== 1 ? 's' : ''} found
160112
</p>
161113
</div>
162114

163115
{filteredPhrases.length > 0 ? (
164-
<div className="grid gap-4 md:grid-cols-2">
116+
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-2">
165117
{filteredPhrases.map((phrase) => (
166118
<PhraseCard key={phrase.id} phrase={phrase} />
167119
))}
168120
</div>
169121
) : (
170-
<div className="text-center py-12">
171-
<div
172-
className="w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4"
173-
style={{ background: 'rgba(255, 255, 255, 0.05)' }}
174-
>
175-
<svg className="w-8 h-8" style={{ color: 'rgba(255, 255, 255, 0.25)' }} fill="none" stroke="currentColor" viewBox="0 0 24 24">
122+
<div className="text-center py-20 bg-white/[0.02] border border-dashed border-white/5 rounded-3xl">
123+
<div className="w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4 bg-white/5">
124+
<svg className="w-8 h-8 text-white/20" fill="none" stroke="currentColor" viewBox="0 0 24 24">
176125
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9.172 16.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
177126
</svg>
178127
</div>
179-
<h3 className="text-lg font-medium mb-1" style={{ color: '#F8FAFC' }}>No templates found</h3>
180-
<p style={{ color: 'rgba(255, 255, 255, 0.45)' }}>Try adjusting your search or category filter</p>
128+
<h3 className="text-lg font-medium mb-1 text-white/90">No templates found</h3>
129+
<p className="text-sm text-white/45">Try adjusting your search or category filter</p>
181130
</div>
182131
)}
183132
</main>

0 commit comments

Comments
 (0)