Skip to content

Commit 03cd947

Browse files
Initial commit: Faculty directory app with live data fetch
1 parent de5a880 commit 03cd947

File tree

10 files changed

+2051
-122
lines changed

10 files changed

+2051
-122
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules
2+
dist
3+
.DS_Store
4+
cspicks/

LICENSE

Lines changed: 21 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,21 @@
1-
Creative Commons Legal Code
2-
3-
CC0 1.0 Universal
4-
5-
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6-
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7-
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8-
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9-
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10-
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11-
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12-
HEREUNDER.
13-
14-
Statement of Purpose
15-
16-
The laws of most jurisdictions throughout the world automatically confer
17-
exclusive Copyright and Related Rights (defined below) upon the creator
18-
and subsequent owner(s) (each and all, an "owner") of an original work of
19-
authorship and/or a database (each, a "Work").
20-
21-
Certain owners wish to permanently relinquish those rights to a Work for
22-
the purpose of contributing to a commons of creative, cultural and
23-
scientific works ("Commons") that the public can reliably and without fear
24-
of later claims of infringement build upon, modify, incorporate in other
25-
works, reuse and redistribute as freely as possible in any form whatsoever
26-
and for any purposes, including without limitation commercial purposes.
27-
These owners may contribute to the Commons to promote the ideal of a free
28-
culture and the further production of creative, cultural and scientific
29-
works, or to gain reputation or greater distribution for their Work in
30-
part through the use and efforts of others.
31-
32-
For these and/or other purposes and motivations, and without any
33-
expectation of additional consideration or compensation, the person
34-
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35-
is an owner of Copyright and Related Rights in the Work, voluntarily
36-
elects to apply CC0 to the Work and publicly distribute the Work under its
37-
terms, with knowledge of his or her Copyright and Related Rights in the
38-
Work and the meaning and intended legal effect of CC0 on those rights.
39-
40-
1. Copyright and Related Rights. A Work made available under CC0 may be
41-
protected by copyright and related or neighboring rights ("Copyright and
42-
Related Rights"). Copyright and Related Rights include, but are not
43-
limited to, the following:
44-
45-
i. the right to reproduce, adapt, distribute, perform, display,
46-
communicate, and translate a Work;
47-
ii. moral rights retained by the original author(s) and/or performer(s);
48-
iii. publicity and privacy rights pertaining to a person's image or
49-
likeness depicted in a Work;
50-
iv. rights protecting against unfair competition in regards to a Work,
51-
subject to the limitations in paragraph 4(a), below;
52-
v. rights protecting the extraction, dissemination, use and reuse of data
53-
in a Work;
54-
vi. database rights (such as those arising under Directive 96/9/EC of the
55-
European Parliament and of the Council of 11 March 1996 on the legal
56-
protection of databases, and under any national implementation
57-
thereof, including any amended or successor version of such
58-
directive); and
59-
vii. other similar, equivalent or corresponding rights throughout the
60-
world based on applicable law or treaty, and any national
61-
implementations thereof.
62-
63-
2. Waiver. To the greatest extent permitted by, but not in contravention
64-
of, applicable law, Affirmer hereby overtly, fully, permanently,
65-
irrevocably and unconditionally waives, abandons, and surrenders all of
66-
Affirmer's Copyright and Related Rights and associated claims and causes
67-
of action, whether now known or unknown (including existing as well as
68-
future claims and causes of action), in the Work (i) in all territories
69-
worldwide, (ii) for the maximum duration provided by applicable law or
70-
treaty (including future time extensions), (iii) in any current or future
71-
medium and for any number of copies, and (iv) for any purpose whatsoever,
72-
including without limitation commercial, advertising or promotional
73-
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74-
member of the public at large and to the detriment of Affirmer's heirs and
75-
successors, fully intending that such Waiver shall not be subject to
76-
revocation, rescission, cancellation, termination, or any other legal or
77-
equitable action to disrupt the quiet enjoyment of the Work by the public
78-
as contemplated by Affirmer's express Statement of Purpose.
79-
80-
3. Public License Fallback. Should any part of the Waiver for any reason
81-
be judged legally invalid or ineffective under applicable law, then the
82-
Waiver shall be preserved to the maximum extent permitted taking into
83-
account Affirmer's express Statement of Purpose. In addition, to the
84-
extent the Waiver is so judged Affirmer hereby grants to each affected
85-
person a royalty-free, non transferable, non sublicensable, non exclusive,
86-
irrevocable and unconditional license to exercise Affirmer's Copyright and
87-
Related Rights in the Work (i) in all territories worldwide, (ii) for the
88-
maximum duration provided by applicable law or treaty (including future
89-
time extensions), (iii) in any current or future medium and for any number
90-
of copies, and (iv) for any purpose whatsoever, including without
91-
limitation commercial, advertising or promotional purposes (the
92-
"License"). The License shall be deemed effective as of the date CC0 was
93-
applied by Affirmer to the Work. Should any part of the License for any
94-
reason be judged legally invalid or ineffective under applicable law, such
95-
partial invalidity or ineffectiveness shall not invalidate the remainder
96-
of the License, and in such case Affirmer hereby affirms that he or she
97-
will not (i) exercise any of his or her remaining Copyright and Related
98-
Rights in the Work or (ii) assert any associated claims and causes of
99-
action with respect to the Work, in either case contrary to Affirmer's
100-
express Statement of Purpose.
101-
102-
4. Limitations and Disclaimers.
103-
104-
a. No trademark or patent rights held by Affirmer are waived, abandoned,
105-
surrendered, licensed or otherwise affected by this document.
106-
b. Affirmer offers the Work as-is and makes no representations or
107-
warranties of any kind concerning the Work, express, implied,
108-
statutory or otherwise, including without limitation warranties of
109-
title, merchantability, fitness for a particular purpose, non
110-
infringement, or the absence of latent or other defects, accuracy, or
111-
the present or absence of errors, whether or not discoverable, all to
112-
the greatest extent permissible under applicable law.
113-
c. Affirmer disclaims responsibility for clearing rights of other persons
114-
that may apply to the Work or any use thereof, including without
115-
limitation any person's Copyright and Related Rights in the Work.
116-
Further, Affirmer disclaims responsibility for obtaining any necessary
117-
consents, permissions or other rights required for any use of the
118-
Work.
119-
d. Affirmer understands and acknowledges that Creative Commons is not a
120-
party to this document and has no duty or obligation with respect to
121-
this CC0 or use of the Work.
1+
MIT License
2+
3+
Copyright (c) 2025
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,56 @@
1-
# csgmu
1+
# CS Faculty Directory
2+
3+
Searchable directory for the George Mason University Computer Science department. Browse faculty by name, rank, track, or research interest.
4+
5+
Data sourced from [cs.gmu.edu](https://cs.gmu.edu/people/faculty/).
6+
7+
## Features
8+
9+
- **Search** by name, email, research area, PhD school, or office
10+
- **#tag search** — type `#associate`, `#tenure`, `#AI`, etc.
11+
- **Filter** by track (Tenure-Track / Teaching) and rank
12+
- **Click a research interest** to see all faculty in that area
13+
14+
## Getting Started
15+
16+
```bash
17+
npm install
18+
npm run dev
19+
```
20+
21+
## Updating Faculty Data
22+
23+
**Data Source:** The directory reads live from [this Google Sheet](https://docs.google.com/spreadsheets/d/1Cei8Dqc_i1MXVBEKy_H6LIG5R6HmFEEwfrk9WmlruXM/edit?usp=sharing).
24+
25+
To update the directory:
26+
1. Edit the Google Sheet directly.
27+
2. Changes will appear on the website immediately after a page refresh.
28+
29+
(A backup snapshot exists in `public/faculty.csv`, used only if the live fetch fails.)
30+
31+
32+
### CSV Columns
33+
34+
| Column | Example |
35+
|--------|---------|
36+
| First Name | ThanhVu |
37+
| Last Name | Nguyen |
38+
| gmu email/userid | tvn@gmu.edu |
39+
| Tenure-Track/Teaching/Staff | Tenure-Track |
40+
| Rank | Associate Professor |
41+
| Website | roars.dev |
42+
| Research interests | Software Engineering, Formal Methods |
43+
| Office (building and room #) | Engineering 5343 |
44+
| Year started at GMU | 2019 |
45+
| PhD from | University of New Mexico |
46+
47+
## Deploying
48+
49+
```bash
50+
npm run build
51+
npm run preview
52+
```
53+
54+
## License
55+
56+
MIT

index.html

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="UTF-8" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>GMU CS Faculty Directory</title>
8+
<meta name="description"
9+
content="Searchable directory of George Mason University Computer Science faculty, research interests, and achievements." />
10+
<link rel="preconnect" href="https://fonts.googleapis.com">
11+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12+
<link
13+
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Outfit:wght@500;700;800&display=swap"
14+
rel="stylesheet">
15+
<link rel="stylesheet" href="./src/style.css">
16+
</head>
17+
18+
<body>
19+
<!-- Theme toggle -->
20+
<button class="theme-toggle" id="theme-toggle" aria-label="Toggle dark mode">
21+
<span class="sun-icon">☀️</span>
22+
<span class="moon-icon">🌙</span>
23+
</button>
24+
<script>
25+
const savedTheme = localStorage.getItem('theme');
26+
const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
27+
document.documentElement.setAttribute('data-theme', savedTheme || (systemDark ? 'dark' : 'light'));
28+
</script>
29+
30+
<div id="app">
31+
<header>
32+
<h1>CS Faculty</h1>
33+
<p>George Mason University — Department of Computer Science</p>
34+
</header>
35+
36+
<div class="search-section">
37+
<div class="search-container">
38+
<input type="search" id="main-search"
39+
placeholder="Search by name, area, rank… (try #associate or #tenure)" autofocus>
40+
</div>
41+
42+
<div class="filters">
43+
<div class="filter-group">
44+
<label for="track-filter">Track</label>
45+
<select id="track-filter">
46+
<option value="all" selected>All</option>
47+
<option value="Tenure-Track">Tenure-Track</option>
48+
<option value="Teaching">Teaching</option>
49+
</select>
50+
</div>
51+
52+
<div class="filter-group">
53+
<label for="rank-filter">Rank</label>
54+
<select id="rank-filter">
55+
<option value="all" selected>All</option>
56+
<option value="Professor">Professor</option>
57+
<option value="Associate Professor">Associate</option>
58+
<option value="Assistant Professor">Assistant</option>
59+
<option value="Instructor">Instructor</option>
60+
</select>
61+
</div>
62+
</div>
63+
</div>
64+
65+
<!-- Active interest filter banner -->
66+
<div id="active-filter" class="active-filter-banner" style="display:none;">
67+
<span id="active-filter-text"></span>
68+
<button id="clear-filter" aria-label="Clear filter"></button>
69+
</div>
70+
71+
<div id="faculty-count" class="faculty-count"></div>
72+
73+
<main>
74+
<section id="faculty-results" class="results-grid"></section>
75+
</main>
76+
</div>
77+
78+
<footer>
79+
<a href="https://cs.gmu.edu/people/faculty/" target="_blank">cs.gmu.edu</a>
80+
</footer>
81+
82+
<script type="module" src="/src/main.js"></script>
83+
</body>
84+
85+
</html>

0 commit comments

Comments
 (0)