{"id":15083938,"url":"https://github.com/healingdrawing/task-paf-technical-trainee","last_synced_at":"2026-01-24T06:06:44.342Z","repository":{"id":253558134,"uuid":"838487915","full_name":"healingdrawing/task-paf-technical-trainee","owner":"healingdrawing","description":"CRUD with admin panel. Deno + Hono + Eta + Vue3 based. OAuth2 authentication for Google and X/Twitter. Deno KV database. Zod validation.","archived":false,"fork":false,"pushed_at":"2024-08-17T20:36:48.000Z","size":3284,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"zero","last_synced_at":"2025-02-03T09:51:46.940Z","etag":null,"topics":["admin-panel","crud","css","deno","deno-kv","eta","full-stack-web-development","google-authentication","hono","html","javascript","javascript-frontend","oauth2","twitter-authentication","typescript","typescript-backend","vue3","web-app","zod-validation"],"latest_commit_sha":null,"homepage":"https://task-paf-technical-trainee.deno.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/healingdrawing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-05T18:36:23.000Z","updated_at":"2024-08-17T20:36:51.000Z","dependencies_parsed_at":"2024-09-25T07:00:32.575Z","dependency_job_id":"e279f485-bd4e-431d-a53d-182ea6969f72","html_url":"https://github.com/healingdrawing/task-paf-technical-trainee","commit_stats":{"total_commits":67,"total_committers":2,"mean_commits":33.5,"dds":"0.014925373134328401","last_synced_commit":"0a85d813306a8c1113a4da2e05988f01fe6ad535"},"previous_names":["healingdrawing/task-paf-technical-trainee"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/healingdrawing%2Ftask-paf-technical-trainee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/healingdrawing%2Ftask-paf-technical-trainee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/healingdrawing%2Ftask-paf-technical-trainee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/healingdrawing%2Ftask-paf-technical-trainee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/healingdrawing","download_url":"https://codeload.github.com/healingdrawing/task-paf-technical-trainee/tar.gz/refs/heads/zero","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239412434,"owners_count":19634013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin-panel","crud","css","deno","deno-kv","eta","full-stack-web-development","google-authentication","hono","html","javascript","javascript-frontend","oauth2","twitter-authentication","typescript","typescript-backend","vue3","web-app","zod-validation"],"created_at":"2024-09-25T07:00:24.692Z","updated_at":"2026-01-24T06:06:39.322Z","avatar_url":"https://github.com/healingdrawing.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# task-paf-technical-trainee\n## Full-stack Web Application  \n## [Demo](https://task-paf-technical-trainee.deno.dev)  \n\nDouble login (Google, X/Twitter) + manage collected data using the admin panel.  \n\n## Description \n\n### Frontend technology stack:\n- JavaScript([Vue3](https://vuejs.org)) self-hosted script `vue.esm-browser.prod.js` used to improve UI/UX experience.  \n\n### Backend technology stack:\n- TypeScript([Deno](https://github.com/denoland/deno)) based web application.  \n- Deno(runtime) + [Hono(framework)](https://github.com/honojs/hono) + [Eta(template render engine)](https://github.com/eta-dev/eta) based.  \n- [OAuth2(Open Authorization)](https://oauth.net/2/) implemented for [Google](https://accounts.google.com/) and [X/Twitter](https://twitter.com) accounts, using [deno_vk_oauth](https://github.com/denoland/deno_kv_oauth).  \n- common user can edit personal data record.  \n- admin panel used to manage data records collected from users.  \n- built-in [Deno KV](https://docs.deno.com/deploy/kv/manual/#deno-kv) used to manage database stuff.  \n- [deno deploy](https://deno.com/deploy) hosted.  \n- `admin access` granted using deno deploy `environment variables` in production, and `.env` file in development process.  \nThe `.env` file example:  \n```properties\nGOOGLE_CLIENT_ID=\nGOOGLE_CLIENT_SECRET=\n\nTWITTER_CLIENT_ID=\nTWITTER_CLIENT_SECRET=\n\nGOOGLE_OAUTH_CONFIG_REDIRECT_URI=http://localhost:8000/callback-google\nX_OAUTH_CONFIG_REDIRECT_URI=http://localhost:8000/callback-x\n\nADMIN_IDS=idfromappscreen,anotheradmin,commaseparated\nCSRF_ORIGIN=http://localhost:8000\n```\n- for deno deploy, the `CSRF_ORIGIN` and the `*_CONFIG_REDIRECT_URI` prefix `http://localhost:8000` should be replaced to used domain.  \n- to get `*_CLENT_ID` and `*_CLIENT_SECRET` first configure `OAuth2` for `Google` and `X/Twitter` accounts where you registered.  \n- at the moment (2024) the solutions used have free plans.  \n- `ADMIN_IDS` displayed in profile after login, and provided by `OAuth2 API`. So, first login without admin rights, then get id, finally add id into `.env` or deploy environment variable.  \n\n## Requirements \n\n- configured [Deno](https://github.com/denoland/deno).  \n- correct `.env` file(otherwise OAuth2 will fail).  \n\nDeveloped on linux.  \n\n## Usage  \n\n- clone the repo  \n- create and fill `.env` file in repo root folder(README.md file level).  \n- terminal: `deno task bang` to run locally.  \n\nFor details discover the `deno.json` file.  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhealingdrawing%2Ftask-paf-technical-trainee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhealingdrawing%2Ftask-paf-technical-trainee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhealingdrawing%2Ftask-paf-technical-trainee/lists"}