# No as a Service (NaaS) A simple Sinatra-based web service that provides creative "no" responses in both HTML and JSON formats. ## Features - **Dual Format Support**: Serves both HTML (for browsers) and JSON (for APIs) - **Random Responses**: Returns a random "no" response from a curated list - **Modern Styling**: Beautiful glassmorphism design for the HTML interface - **Health Checks**: Built-in health check endpoint for monitoring - **Containerized**: Ready for deployment with Podman/Docker ## API Endpoints - `GET /` - Returns a random "no" (HTML by default, JSON with Accept header) - `GET /api/no` - Explicit JSON endpoint with additional metadata - `GET /health` - Health check endpoint - `GET /*` - Catch-all that returns "no" for any other path ## Content Negotiation The root endpoint (`/`) supports content negotiation: - Browser requests get HTML - Requests with `Accept: application/json` get JSON ## Usage Examples ### HTML (Browser) ``` curl http://localhost:4567/ ``` ### JSON ```bash # Using Accept header curl -H "Accept: application/json" http://localhost:4567/ # Using explicit API endpoint curl http://localhost:4567/api/no ``` ### Sample JSON Response ```json { "answer": "Absolutely not", "timestamp": "2025-06-06T12:00:00Z", "service": "No as a Service", "version": "1.0.0" } ``` ## Local Development ### Prerequisites - Ruby 3.2+ - Bundler ### Setup ```bash # Install dependencies bundle install # Run the application ruby app.rb # Or use rerun for auto-reload during development bundle exec rerun ruby app.rb ``` The application will be available at `http://localhost:4567` ## Container Deployment ### Build with Podman ```bash podman build -t naas . ``` ### Run with Podman ```bash # Basic run podman run -p 4567:4567 naas # Run in background with restart policy podman run -d --name naas-service -p 4567:4567 --restart=always naas # Run with custom port podman run -p 8080:4567 -e PORT=4567 naas ``` ### Docker Commands The same commands work with Docker by replacing `podman` with `docker`. ## Environment Variables - `PORT` - Port to bind to (default: 4567) ## Health Monitoring The service includes a health check endpoint at `/health` that returns: ```json { "status": "healthy", "timestamp": "2025-06-06T12:00:00Z" } ``` ## File Structure ``` . ├── app.rb # Main Sinatra application ├── Gemfile # Ruby dependencies ├── Containerfile # Container build instructions └── README.md # This file ``` ## License This project is released under the MIT License. Feel free to use it for your negative response needs!