198```
199โโโ backend/
200โ โโโ database/
201โ โ โโโ migrations.ts # Schema definitions
202โ โ โโโ queries.ts # DB query functions
257 ```
258
259### Database Patterns
260- Run migrations on startup or comment out for performance
261- Change table names when modifying schemas rather than altering
198```
199โโโ backend/
200โ โโโ database/
201โ โ โโโ migrations.ts # Schema definitions
202โ โ โโโ queries.ts # DB query functions
257 ```
258
259### Database Patterns
260- Run migrations on startup or comment out for performance
261- Change table names when modifying schemas rather than altering
21## Further resources
22
23- [React Hono Example](https://www.val.town/x/stevekrouse/reactHonoExample) is a bigger example project, with a SQLite database table, queries, client-side CSS, a favicon, and shared code that runs on both client and server.
21## Further resources
22
23- [React Hono Example](https://www.val.town/x/stevekrouse/reactHonoExample) is a bigger example project, with a SQLite database table, queries, client-side CSS, a favicon, and shared code that runs on both client and server.
227 if (!response.ok) {
228 if (response.status === 404) {
229 return c.json({ error: "BIN not found in database" }, 404);
230 }
231 throw new Error(`BIN lookup service error: ${response.status}`);
276app.get("/api/marketplace/products", async c => {
277 try {
278 // In a real application, this would fetch from a database
279 const products = [
280 {
355 const id = c.req.param("id");
356
357 // In a real application, this would fetch from a database
358 const products = [
359 {
412 }
413
414 // In a real application, this would send an email or save to database
415 // For now, we'll just return success and redirect to Telegram
416
267 <p className="text-sm text-blue-200 opacity-80">
268 Enter the first 6-8 digits of any credit card number to get information about the issuing bank,
269 card type, country, and other details. This uses legitimate public BIN databases.
270 </p>
271 </div>
254 { name: "Trello", url: "https://trello.com/", category: "Productivity", description: "AI-enhanced project boards" },
255 { name: "Todoist", url: "https://todoist.com/", category: "Productivity", description: "AI task management app" },
256 { name: "Airtable", url: "https://airtable.com/", category: "Productivity", description: "AI-powered database platform" },
257 { name: "SmartSuite", url: "https://www.smartsuite.com/", category: "Productivity", description: "AI work management platform" },
258
12 throw new Error("Notion API token not found");
13 }
14 const databaseId = "16e2c190bff080fd9ea8d2a8c21548b0";
15
16 // Use database query with filter instead of direct page fetch
17 const response = await fetch(`https://api.notion.com/v1/databases/${databaseId}/query`, {
18 method: "POST",
19 headers: {
50
51 if (!response.ok) {
52 throw new Error(`Failed to query Notion database: ${response.statusText}`);
53 }
54
1// Script to set up the telegram_chats table in SQLite
2// Run this script manually to create the database table
3
4export default async function setupTelegramChatDb() {
25 `);
26
27 return "Telegram chat database table created successfully.";
28 } catch (error) {
29 console.error("Error setting up telegram_chats table:", error);
13## Technical Architecture
14
15**โ ๏ธ important caveat: the admin dashboard doesn't have auth! currently it just relies on security by obscurity of people not knowing the url to a private val. this is not very secure. if you fork this project and put sensitive data in a database you should think carefully about how to secure it.**
16
17Stevens has been designed with the utmost simplicity and extensibility, much like a well-organized household. At the heart of his operation lies a single "memories" table - a digital equivalent of a butler's meticulous records. This table serves as the foundation for all of Stevens' operations.
45- `dashboard`: the admin view for showing the memories notebook + visualizing imports
46- `dailyBriefing`: stuff related to sending a daily update via telegram
47- `dbUtils`: little one-off scripts for database stuff
48
49## Hiring your own Stevens
57- For the Google Calendar integration you'll need `GOOGLE_CALENDAR_ACCOUNT_ID` and `GOOGLE_CALENDAR_CALENDAR_ID`. See [these instuctions](https://www.val.town/v/stevekrouse/pipedream) for details.
58
59**important caveat: the admin dashboard doesn't have auth! currently it just relies on security by obscurity of people not knowing the url to a private val. this is not very secure, if you put sensitive data in a database you should think carefully about how to secure it.**
60
61Overall it's a simple enough project that I encourage you to just copy the ideas and run in your own direction rather than try to use it as-is.