stevensDemoindex.ts1 match
12getAllMemories,
13updateMemory,
14} from "./database/queries.ts";
15import { type Memory } from "../shared/types.ts";
16import { blob } from "https://esm.town/v/std/blob";
3435/**
36* Store a chat message in the database
37*/
38export async function storeChatMessage(
stevensDemogetWeather.ts1 match
130}
131132console.log(`Weather forecast updated in the database.`);
133return summary;
134}
125}
126127console.log(`Calendar events imported into the database.`);
128return events;
129} catch (error) {
stevensDemogenerateFunFacts.ts2 matches
89/**
10* Retrieves previously generated fun facts from the memories database
11* @returns Array of previous fun facts
12*/
4748/**
49* Inserts a fun fact into the memories database
50* @param date Date for the fun fact in ISO format
51* @param factText The fun fact text
stevensDemo.cursorrules2 matches
208```
209โโโ backend/
210โ โโโ database/
211โ โ โโโ migrations.ts # Schema definitions
212โ โ โโโ queries.ts # DB query functions
270- Handle API calls properly with proper error catching
271272### Database Patterns
273- Run migrations on startup or comment out for performance
274- Change table names when modifying schemas rather than altering
39return {
40success: true,
41message: "Telegram chat database table created successfully.",
42verification: tableCheck.rows,
43};
ValTownForNotionwebhookAPI15 matches
24});
2526app.post("/example/database/pages", async (c) => {
27// blob keys map to endpoints for the cron resets
28const blobKey = await c.req.url.replace("https://", "");
29const askingFor = c.req.headers.get("asking_for") || "default"; // val.town or default
3031// capture the database id to store in the blob
32const targetId = c.req.headers.get("target_id");
3334// get the pages in this database
35const databaseChildren = await notion.databases.query({ database_id: targetId });
36// delete all pages to prevent bad actors from leaving naughty rows behi
37for (const [key, child] of databaseChildren.results.entries()) {
38const page = await notion.pages.update({
39page_id: child.id,
42}
4344// get the database
45const database = await notion.databases.retrieve({ database_id: targetId });
46// convert the statuses string in the status property into JSON
47const statuses = JSON.parse(database?.properties?.Statuses?.formula?.expression);
48// get the first item on the list of statuses, to set the status for new pages
49const status = statuses[0];
50// add back pages; fresh start for the next person to add favicons
51const defaults = ["val.town", "notion.com", "hono.dev"].reverse();
52// create new database pages from default object
53for (const item of defaults) {
54const page = await notion.pages.create({
55parent: {
56type: "database_id",
57database_id: targetId,
58},
59properties: {
88});
8990app.post("/example/database/page", async (c) => {
91const payload = await c.req.json();
92const data = await payload?.data;
100101// store webhook data in blob storage for resets
102// capture the database id to store in the blob
103const databaseId = data?.parent?.database_id;
104const blobObject = {
105id: databaseId,
106date: new Date(),
107content: askingFor,
stevensDemoREADME.md3 matches
13## Technical Architecture
1415**โ ๏ธ 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.**
1617Stevens 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
4849## 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.
5859**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.**
6061Overall 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.
stevensDemoREADME.md2 matches
45* `index.ts` - this is the **entrypoint** for this whole project
6* `database/` - this contains the code for interfacing with the app's SQLite database table
78## Hono
26## CRUD API Routes
2728This app has two CRUD API routes: for reading and inserting into the messages table. They both speak JSON, which is standard. They import their functions from `/backend/database/queries.ts`. These routes are called from the React app to refresh and update data.
2930## Errors