{"id":25627710,"url":"https://github.com/hazemkrimi/touch-programming","last_synced_at":"2026-04-12T17:37:09.769Z","repository":{"id":277735241,"uuid":"903786584","full_name":"hazemKrimi/touch-programming","owner":"hazemKrimi","description":"Master touch typing with real code snippets from your favorite programming languages, powered by AI.","archived":false,"fork":false,"pushed_at":"2025-05-11T19:56:22.000Z","size":2770,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-11T20:29:50.689Z","etag":null,"topics":["echo-framework","golang","langchain","llama3","ollama","react","touch-typing","typing-practice"],"latest_commit_sha":null,"homepage":"https://touch-programming.hazemkrimi.tech","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hazemKrimi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2024-12-15T15:05:04.000Z","updated_at":"2025-05-11T19:56:25.000Z","dependencies_parsed_at":"2025-04-20T18:28:47.899Z","dependency_job_id":"3612ea35-d754-4a3e-b0a9-f42e6fc5bcc4","html_url":"https://github.com/hazemKrimi/touch-programming","commit_stats":null,"previous_names":["hazemkrimi/touch-programming"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/hazemKrimi/touch-programming","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazemKrimi%2Ftouch-programming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazemKrimi%2Ftouch-programming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazemKrimi%2Ftouch-programming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazemKrimi%2Ftouch-programming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hazemKrimi","download_url":"https://codeload.github.com/hazemKrimi/touch-programming/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hazemKrimi%2Ftouch-programming/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284073329,"owners_count":26942774,"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","status":"online","status_checked_at":"2025-11-12T02:00:06.336Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["echo-framework","golang","langchain","llama3","ollama","react","touch-typing","typing-practice"],"created_at":"2025-02-22T17:54:13.678Z","updated_at":"2025-11-12T17:03:36.276Z","avatar_url":"https://github.com/hazemKrimi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Touch Programming\n\nAn AI powered web application which lets you master touch typing with real code snippets from your favorite programming languages, powered by AI.\n\n## Requirements\n\n1. You need to have [Ollama](https://ollama.com/download) installed and you will need to have an LLM installed afterwards. I am currently using `llama3.2:1b` which I got through the following command:\n\n```\nollama pull llama3.2:1b\n```\n\n2. You need to have [Golang](https://go.dev/doc/install) installed since it is the language used for writing the API.\n\n3. You need Node.js to install the client dependencies and run the project locally. I recommend installing it through [NVM](https://github.com/nvm-sh/nvm).\n\n## Development\n\n1. To run the server you need to have the LLM already pulled from `ollama` as stated above and you need a `.env` file following the example file in the repo then run the following commands:\n\n```\ncd server\ngo run main.go\n```\n\n2. To run the client you also need a `.env` following the example file. You can point the API to the local server you are running. Then run the following commands:\n\n```\ncd client\nnpm run dev\n```\n\n## Deployment\n\nI am using `nginx` with `certbot` as a seemless webserver with an SSL certificate to get HTTPS. Here is how I setup the deployment assuming you already have `nginx` and `certbot` installed:\n\n1. Create a file to to be the webserver config under `/etc/nginx/sites-available` with its content being what is in `deploy/nginx.conf` of the repo. (You will need to use your own domain)\n\n2. Symlink the config into `/etc/nginx/sites-enabled`:\n\n```\nsudo ln -s /etc/nginx/sites-available/\u003cwebserver-config\u003e /etc/nginx/sites-enabled/\u003cwebserver-config\u003e\n```\n\n3. Restart `nginx` and its service if you're using `systemd`:\n\n```\nsudo nginx -t\nsudo systemctl restart nginx\n```\n\n4. Run `certbot` to get an SSL certificate for your domain:\n\n```\nsudo certbot --nginx\n```\n\n5. If you forked this repo you can use the actions workflow that I am using but you will need to add an SSH private key as an action secret. You will find this setting under repo settings \u003e security \u003e secrets and variables \u003e actions. You will add your key as `DEPLOY_SSH_KEY` in repository secrets.\n\n6. If you are not using GitHub Actions or not deploying on a VPS will need to build the client and server yourself and deploy them respectively. Here are the build commands:\n\n```\n# Building the server\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o executable\n\n# Building the client.\nnpm run build\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazemkrimi%2Ftouch-programming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhazemkrimi%2Ftouch-programming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazemkrimi%2Ftouch-programming/lists"}