Val Town Code Search

A web application for searching through your Val Town vals using the Val Town API.

Features

  • Search through all your vals by name, content, or description
  • Filter by val type (HTTP, cron, email, script)
  • View val details including code content
  • Direct links to edit vals in Val Town
  • Real-time search with debouncing
  • Responsive design with TailwindCSS

Project Structure

├── backend/
│   ├── index.ts             # Main Hono server
│   └── routes/
│       └── api.ts           # Val Town API integration
├── frontend/
│   ├── index.html           # Main HTML template
│   ├── index.tsx            # React frontend entry point
│   └── components/
│       ├── App.tsx          # Main app component
│       ├── SearchBar.tsx    # Search input component
│       ├── ValCard.tsx      # Individual val display
│       └── FilterBar.tsx    # Type filters
└── shared/
    └── types.ts             # Shared TypeScript types

Setup

  1. Get your Val Town API token:

    • Go to Val Town API Settings
    • Create a new API token with the following scopes:
      • vals:read - Required to read your vals and their content
      • user:read - Required to access your user information and vals list
    • Copy the token
  2. Set the environment variable:

    • In your Val Town project, set VALTOWN_API_TOKEN to your API token
    • The app will automatically detect when the token is available
  3. Access the app:

    • The app will be available at your HTTP endpoint
    • If the token isn't set, you'll see instructions on the homepage

Required API Scopes

The application requires the following Val Town API scopes:

  • vals:read - Allows reading your vals, their code content, metadata, and search functionality
  • user:read - Allows accessing your user profile and listing your vals

These scopes provide read-only access to your vals and are necessary for the search functionality to work properly.

API Endpoints

  • GET / - Serves the main application
  • GET /api/vals - Search vals with query parameters:
    • q - Search query (optional)
    • type - Filter by val type (optional)
    • limit - Number of results (default: 50)