this project has been build during the first official deno kv hackathon.
it uses a (very experimental) framework named ixalan
,
which i've been working on in my spare time. at it's core
ixalan
only uses deno
's standard library,
while also providing a file-based router
, route
overrides
and a custom jsx-runtime
, which is
currently only used as a templating engine.
for a clear separation ixalan
and app
have
their dedicated sections in the overall project structure.
even though some existing code has been used, some major rewrites for
the framework have happened during the hackathon, whereas everything
from app
has been written from scratch.
deno kv
is the project's primary data source. there's a
thin wrapper around kv with crud operations and a schema
is
passed to the create database
function to enforce
type-safety. on server startup a lookup is happening to potentially
seed the database. the underlying data is provided via
pokeapi. for authentication deno kv auth has been chosen, which is the project's only dependency apart from deno's excellent standard library.
on the project there are two primary routes. there's /pokemon
and there's /leaderboard
.
/pokemon
provides a paginates search, which is fed by deno kv
. each of the results link to a pokemon via it's id
. the search is also
capable of handling pokemon properties, so that queries such as
"type:fire type:flying" or "zap type:electric" are possible.
on the individual/pokemon/:id
routes, there's a
minimalistic entry to the individual pokemon. underneath there are
four buttons: allstar, favorite,
infamous and versatile. each logged in user has the chance participate in the voting!
the results can be seen on /leaderboard
, where some
simple filter options and aggregations are available. on the go live
there's also a hidden feature, which has to be unlocked by the
community!
the project can be started locally via deno task dev
.
as github
is used as an oauth provider an application need to be registered. this can be done here. the callback url should point to /api/auth/callback
.
also the following environment variables need to be set:
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
can be run on deno deploy once deno kv
is enabled.