6
7- `index.html` - Main HTML template
8- `index.tsx` - Main React component and application entry point
9
10## Components
24## Technologies
25
26- React 18.2.0
27- TypeScript
28- Twind (Tailwind-in-JS)
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useState } from "https://esm.sh/react@18.2.0";
3import { CommitWithPR } from "../../shared/types.ts";
4
35 <tbody className="bg-white divide-y divide-gray-200">
36 {commits.map((commit) => (
37 <React.Fragment key={commit.sha}>
38 <tr
39 className="hover:bg-gray-50 cursor-pointer"
121 </tr>
122 )}
123 </React.Fragment>
124 ))}
125 </tbody>
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React from "https://esm.sh/react@18.2.0";
3
4interface RepoSelectorProps {
24}: RepoSelectorProps) {
25 // Default to 30 days ago for start date if not set
26 React.useEffect(() => {
27 if (!startDate) {
28 const thirtyDaysAgo = new Date();
58 onChange={(e) => onRepoChange(e.target.value)}
59 className="w-full p-2 border rounded"
60 placeholder="e.g., react"
61 />
62 </div>
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { useState } from "https://esm.sh/react@18.2.0";
3
4interface User {
19 const [error, setError] = useState<string | null>(null);
20
21 const handleSubmit = async (e: React.FormEvent) => {
22 e.preventDefault();
23
26
27- **Database**:[Val Town SQLite](https://docs.val.town/std/sqlite/) for storing users, sessions, and magic link tokens
28- **Frontend**: React with Tailwind CSS
29- **Backend**: Hono.js for API routes and middleware
30- **Authentication**: Built by following the [Lucia guide](https://lucia-next.pages.dev/)
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { useState } from "https://esm.sh/react@18.2.0";
3
4interface LoginFormProps {
11 const [emailSent, setEmailSent] = useState(false);
12
13 const handleSubmit = async (e: React.FormEvent) => {
14 e.preventDefault();
15
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import { App } from "./components/App.tsx";
4
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { useEffect, useState } from "https://esm.sh/react@18.2.0";
3import { LoginForm } from "./LoginForm.tsx";
4import { UserProfile } from "./UserProfile.tsx";
26
27- **Database**:[Val Town SQLite](https://docs.val.town/std/sqlite/) for storing users, sessions, and magic link tokens
28- **Frontend**: React with Tailwind CSS
29- **Backend**: Hono.js for API routes and middleware
30- **Authentication**: Built by following the [Lucia guide](https://lucia-next.pages.dev/)
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { useState } from "https://esm.sh/react@18.2.0";
3
4interface User {
19 const [error, setError] = useState<string | null>(null);
20
21 const handleSubmit = async (e: React.FormEvent) => {
22 e.preventDefault();
23