{"id":19247963,"url":"https://github.com/ahmad2b/kly-frontend","last_synced_at":"2026-05-06T19:05:48.273Z","repository":{"id":219754748,"uuid":"749829798","full_name":"ahmad2b/kly-frontend","owner":"ahmad2b","description":"AI URL shortener","archived":false,"fork":false,"pushed_at":"2024-02-11T12:48:09.000Z","size":285,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-05T05:25:25.977Z","etag":null,"topics":["fastapi","nextjs","nextjs14","vercel"],"latest_commit_sha":null,"homepage":"https://www.kly.lol/","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/ahmad2b.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-01-29T13:37:15.000Z","updated_at":"2024-02-08T19:48:17.000Z","dependencies_parsed_at":"2024-02-08T20:35:50.654Z","dependency_job_id":"6cbf79cf-232a-4074-89ee-7cbb9158e8b2","html_url":"https://github.com/ahmad2b/kly-frontend","commit_stats":null,"previous_names":["ahmad2b/kly.lol"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad2b%2Fkly-frontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad2b%2Fkly-frontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad2b%2Fkly-frontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad2b%2Fkly-frontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ahmad2b","download_url":"https://codeload.github.com/ahmad2b/kly-frontend/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240339583,"owners_count":19785957,"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":["fastapi","nextjs","nextjs14","vercel"],"created_at":"2024-11-09T18:05:56.506Z","updated_at":"2026-05-06T19:05:48.195Z","avatar_url":"https://github.com/ahmad2b.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kly.lol - (AI URL Shortner)\n\nKly.lol is a smart link shortner that shortens your links using generative ai. The AI analyze the content of the link and generates a short link based on the content of the link or you can write the description what the url is about and the AI will generate a short link based on the description.\n\nIf the description is not provided then only the AI will generate a short link based on the content of the url provided.\n\n---\n\nThis is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template\u0026filter=next.js\u0026utm_source=create-next-app\u0026utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n\n---\n\nJSON Web Key Set (JWKS) is a set of keys that contains the cryptographic keys used to verify any JSON Web Token (JWT) issued by the authorization server. These keys are used to sign and validate JWTs.\n\nJWTs are a compact, URL-safe means of representing claims to be transferred between two parties. They are often used for authentication and information exchange. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signature (JWS).\n\nJWKS is not an alternative to JWT, but rather a companion to it. When a JWT is issued, it is signed using a key. The recipient of the JWT can then use the JWKS to get the public key and verify the JWT's signature, ensuring it was indeed issued by the expected party and has not been tampered with.\n\nHere's a simplified flow:\n\nA client sends a request to an authorization server to authenticate.\nThe server authenticates the client, creates a JWT with the necessary claims, and signs it using a private key.\nThe server sends the JWT back to the client.\nThe client sends the JWT in the Authorization header when making requests to a resource server.\nThe resource server fetches the JWKS from the authorization server.\nThe resource server uses the public key in the JWKS to verify the signature of the JWT.\nIf the signature is valid, the server processes the request. If not, the server rejects the request.\nIn the code you provided, the get_jwks() function is used to fetch the JWKS, either from a cache or from a remote server. This JWKS can then be used to verify the signatures of incoming JWTs.\n\n---\n\nTo update the tables in the database after adding a new field to the User SQLModel, you would typically use a migration tool. However, SQLModel doesn't have built-in support for migrations yet.\n\nYou can manually update the tables by dropping the existing table and recreating it with the new schema. This can be done by modifying the create_db_and_tables function in the \\_database.py file.\n\nHere's how you can do it:\n\nPlease note that this will delete all existing data in the User table. If you want to preserve the data, you'll need to write a script to backup the data before dropping the table and then restore it after the table is recreated.\n\nFor more complex migrations, you might want to consider using Alembic, a database migration tool for SQLAlchemy (which SQLModel is built on). However, using Alembic with SQLModel might require some additional configuration and isn't as straightforward as using it with SQLAlchemy directly.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmad2b%2Fkly-frontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahmad2b%2Fkly-frontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmad2b%2Fkly-frontend/lists"}