Refine and cleanup

This commit is contained in:
KS Jannette
2026-02-13 10:42:37 -05:00
parent 02affb154c
commit 6b7324c320
10 changed files with 1306 additions and 20 deletions

View File

@@ -1,10 +1,10 @@
# kohngrüti app
# kongruity app
kohngrüti employs Large Language Model ("LLM") semantic grouping functionality to cluster large volumes of "to dos" or issue tags in development (or other) settings, according to thematic or topical similarity.
kongruity employs Large Language Model ("LLM") semantic grouping functionality to cluster large volumes of "to dos" or issue tags in development (or other) settings, according to thematic or topical similarity.
(To learn more about this topic, see, e.g., [Kozlowski A., Boutyline A., Semantic Structure in Large Language Model Embeddings Aug. 2025, arXiv:2508.10003v1:04 Aug 2025](https://arxiv.org/html/2508.10003v1)).
In the world of kohngrüti, these "to dos" are called "sticky notes." kohngrüti's React/Vite UI views a board of seemingly chaotic "sticky notes". But with one click, they are transformed into manageable, actionable groups, each with a header that explains the group semantic interrelation.
In the world of kongruity, these "to dos" are called "sticky notes." kongruity's React/Vite UI views a board of seemingly chaotic "sticky notes". But with one click, they are transformed into manageable, actionable groups, each with a header that explains the group semantic interrelation.
The backend is an Express API that serves "sticky note" data and proxies semantic grouping requests to Antrhopic Claude.
@@ -20,8 +20,8 @@ Developers may feel free to install other LLM SDKs and alter the syntax at backe
### 1. Unzip the project
```bash
unzip kohngrüti.zip
cd kohngrüti
unzip kongruity.zip
cd kongruity
```
### 2. Create a secrets file

View File

@@ -1,13 +1,13 @@
import express from 'express';
import cors from 'cors';
import notesRoutes from './routes/notes.routes.js';
import router from './routes/notes.routes.js';
const app = express();
app.use(cors());
app.use(express.json());
app.use('/v1/notes', notesRoutes);
app.use('/v1/notes', router);
app.use((req, res) => {
res.status(404).json({ error: `Requested path is invalid or does not exist: ${req.method} ${req.originalUrl}` });

View File

@@ -1,5 +0,0 @@
const config = {
port: process.env.PORT || 3001,
};
export default config;

1292
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -30,7 +30,7 @@ router.post('/cluster', async (req, res) => {
const clusters = await clusterNotes(notes);
res.json(clusters);
} catch (err) {
res.status(500).json({ error: 'Clustering failed' });
res.status(500).json({ error: `Clustering failed: ${err}` });
}
});

View File

@@ -1,7 +1,6 @@
import app from './app.js';
import config from './config/index.js';
const PORT = config.port || 3001;
const PORT = process.env.PORT || 3001;
app.listen(PORT, () => {
console.log(`Backend running on port ${PORT}`);

View File

@@ -5,7 +5,7 @@
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&icon_names=recenter" />
<title>kohngrüti app</title>
<title>kongruity app</title>
</head>
<body>
<div id="root"></div>

View File

@@ -2,7 +2,7 @@ const Navbar = () => {
return (
<div className="main-head-box">
<div className="main-head-subbox-left">
<h1 className="main-head">kohngrüti</h1>
<h1 className="main-head">kongruity</h1>
</div>
<div className="main-head-subbox-right">
<span className="material-symbols-outlined">recenter</span>

View File

@@ -1,7 +1,7 @@
.main-head-box {
border-radius: 8px;
border: 1px solid #6dd6f4;
background-color: rgb(92, 0, 91);
background-color: rgb(92, 0 91);
display: flex;
}

View File

@@ -36,11 +36,11 @@ describe('App routing', () => {
it('should render the Home page on "/"', async () => {
renderApp('/');
expect(await screen.findByText('kohngrüti')).toBeInTheDocument();
expect(await screen.findByText('kongruity')).toBeInTheDocument();
});
it('should redirect unknown routes to Home', async () => {
renderApp('/some/random/path');
expect(await screen.findByText('kohngrüti')).toBeInTheDocument();
expect(await screen.findByText('kongruity')).toBeInTheDocument();
});
});