This repository contains both the Events API and the tampa.dev website for discovering tech events in the Tampa Bay area.
- Website: tampa.dev
- API: api.tampa.dev
Want your group included in the Tampa Bay events feed?
Interactive API documentation with all available endpoints is available at:
The OpenAPI specification is available at:
https://api.tampa.dev/openapi.json
Auto-generated API clients are available for multiple languages. Clients are automatically regenerated and published when the API schema changes.
npm install @tampadevs/events-api-client --registry=https://npm.pkg.github.comimport { EventsApi } from '@tampadevs/events-api-client';
const api = new EventsApi();
const events = await api.getEvents();go get github.com/TampaDevs/tampa.dev/clients/gopackage main
import (
"context"
"fmt"
tampaevents "github.com/TampaDevs/tampa.dev/clients/go"
)
func main() {
cfg := tampaevents.NewConfiguration()
client := tampaevents.NewAPIClient(cfg)
events, _, err := client.EventsAPI.GetEvents(context.Background()).Execute()
if err != nil {
panic(err)
}
for _, event := range events {
fmt.Println(event.GetTitle())
}
}pip install git+https://github.com/TampaDevs/tampa.dev.git#subdirectory=clients/pythonfrom tampa_events_api import ApiClient, EventsApi
client = ApiClient()
api = EventsApi(client)
events = api.get_events()
for event in events:
print(event.title)gem install tampa_events_api --source "https://rubygems.pkg.github.com/tampadevs"require 'tampa_events_api'
api = TampaEventsAPI::EventsApi.new
events = api.get_events
events.each do |event|
puts event.title
endAdd Tampa.dev authentication to your app with OAuth 2.1 + PKCE. Give your users single sign-on with the Tampa Bay tech community.
Check out this demonstration app with source code.
- Register your app in the Developer Portal or via the dynamic client registration API
- Redirect users to
https://tampa.dev/oauth/authorizewith PKCE parameters - Exchange the authorization code for an access token at
https://tampa.dev/oauth/token - Use the token to call the Tampa.dev API (
https://api.tampa.dev/v1/me, etc.)
Full integration guide: https://tampa.dev/developer/docs/signin-with-tampadev
JSON Schema definitions for all data models are available in schemas/models/:
event.schema.json- Event datagroup.schema.json- Meetup group datavenue.schema.json- Venue/location dataphoto.schema.json- Photo data
Get all upcoming events:
GET https://api.tampa.dev/events
Get the next event for each group:
GET https://api.tampa.dev/events/next
RSS Feed:
https://api.tampa.dev/rss
iCalendar Feed:
https://api.tampa.dev/ical
Upcoming Events Page:
https://api.tampa.dev/html
All endpoints support optional query parameters:
groups- Comma-separated list of group urlnames (e.g.,tampadevs,suncoast-js)noempty- Exclude groups with no upcoming eventsnoonline- Exclude online eventswithin_hours- Only show events within the next N hourswithin_days- Only show events within the next N days
Example:
https://api.tampa.dev/events?groups=tampadevs&noonline=1
https://api.tampa.dev/widget/next-event?groups=tampadevs
Displays the next upcoming event for the specified group(s).
https://api.tampa.dev/widget/carousel
Displays a carousel of upcoming events.
To start the local API development environment:
npm install
npm startYour local instance of the Events API will become available at http://localhost:8787.
npm testThe website is a React Router 7 app deployed to Cloudflare Workers.
cd web
npm install
npm run devYour local instance will be available at http://localhost:5173.
npm run typecheck # Type check
npm test # Run tests
npm run build # Build for productionCopy .dev.vars.example to .dev.vars and fill in the required values:
cp .dev.vars.example .dev.varsGITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET- GitHub OAuth app credentialsSESSION_SECRET- Random secret for session signing (generate withopenssl rand -base64 32)
User avatars and OAuth app logos are stored in Cloudflare R2:
- Create an R2 bucket named
tampa-dev-uploads-publicin the Cloudflare dashboard - Create an R2 API token with Object Read & Write permissions
- Set these environment variables:
R2_ACCOUNT_ID- Your Cloudflare account IDR2_ACCESS_KEY_ID- R2 API token access keyR2_SECRET_ACCESS_KEY- R2 API token secret keyUPLOADS_PUBLIC_URL- (Optional) Custom domain for the R2 bucket
MEETUP_CLIENT_KEY- Meetup OAuth client keyMEETUP_MEMBER_ID- Your Meetup member IDMEETUP_SIGNING_KEY- RSA private key for JWT signing
Data is served from a cache in Workers KV. This cache data is updated every 30 minutes.
See CHANGELOG.md for recent updates and new features.