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
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 */
2import { renderToString } from "npm:react-dom/server";
3
4export default async function(req: Request) {