├── CNAME
├── Procfile
├── instance
└── app.db
├── templates
├── googledb6605d07a2ef7ce.html
├── robots.txt
├── B4A2B4B8494512CF82C2CF71D91C7285.txt
├── .well-known
│ └── pki-validation
│ │ └── B4A2B4B8494512CF82C2CF71D91C7285.txt
├── about.html
├── shorten.html
├── privacy_policy.html
├── contact.html
├── index.html
├── tou.html
└── base.html
├── static
├── img
│ ├── SQLite.webp
│ ├── ShortLink.png
│ ├── Flask_logo.webp
│ ├── Greensock.webp
│ ├── ShortLink.webp
│ ├── Bootstrap_logo.webp
│ ├── ShortLink Light.png
│ ├── ShortLink Light.webp
│ ├── Python-logo-notext.webp
│ └── svg
│ │ ├── Facebook.svg
│ │ ├── LinkedIn.svg
│ │ ├── Twitter.svg
│ │ ├── Google.svg
│ │ └── Instagram.svg
├── favicon
│ ├── favicon.ico
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── apple-touch-icon.png
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ └── site.webmanifest
├── js
│ └── main.js
├── css
│ └── style.css
├── scss
│ └── main.scss
└── sitemap.xml
├── robots.txt
├── server.py
├── vercel.json
├── requirements.txt
├── LICENSE
├── About ShortLink.md
├── README.md
└── main.py
/CNAME:
--------------------------------------------------------------------------------
1 | etcd.tech
2 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: gunicorn main:app
2 |
--------------------------------------------------------------------------------
/instance/app.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/instance/app.db
--------------------------------------------------------------------------------
/templates/googledb6605d07a2ef7ce.html:
--------------------------------------------------------------------------------
1 | google-site-verification: googledb6605d07a2ef7ce.html
--------------------------------------------------------------------------------
/static/img/SQLite.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/SQLite.webp
--------------------------------------------------------------------------------
/static/img/ShortLink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/ShortLink.png
--------------------------------------------------------------------------------
/static/favicon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/favicon/favicon.ico
--------------------------------------------------------------------------------
/static/img/Flask_logo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/Flask_logo.webp
--------------------------------------------------------------------------------
/static/img/Greensock.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/Greensock.webp
--------------------------------------------------------------------------------
/static/img/ShortLink.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/ShortLink.webp
--------------------------------------------------------------------------------
/static/img/Bootstrap_logo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/Bootstrap_logo.webp
--------------------------------------------------------------------------------
/static/img/ShortLink Light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/ShortLink Light.png
--------------------------------------------------------------------------------
/static/img/ShortLink Light.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/ShortLink Light.webp
--------------------------------------------------------------------------------
/static/favicon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/favicon/favicon-16x16.png
--------------------------------------------------------------------------------
/static/favicon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/favicon/favicon-32x32.png
--------------------------------------------------------------------------------
/static/img/Python-logo-notext.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/img/Python-logo-notext.webp
--------------------------------------------------------------------------------
/static/favicon/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/favicon/apple-touch-icon.png
--------------------------------------------------------------------------------
/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow: /templates/
3 | Disallow: /instance/
4 | Disallow: /static/
5 | Sitemap: /static/sitemap.xml
6 |
--------------------------------------------------------------------------------
/static/favicon/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/favicon/android-chrome-192x192.png
--------------------------------------------------------------------------------
/static/favicon/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haidar038/shortlink/HEAD/static/favicon/android-chrome-512x512.png
--------------------------------------------------------------------------------
/templates/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow: /templates/
3 | Disallow: /instance/
4 | Disallow: /static/
5 | Sitemap: /static/sitemap.xml
6 |
--------------------------------------------------------------------------------
/templates/B4A2B4B8494512CF82C2CF71D91C7285.txt:
--------------------------------------------------------------------------------
1 | A7A6E445A44F858AC50918716000504A6ECA104A38EE41A11D95AA308E2481E4
2 | comodoca.com
3 | 8d813378cf0c296
4 |
--------------------------------------------------------------------------------
/templates/.well-known/pki-validation/B4A2B4B8494512CF82C2CF71D91C7285.txt:
--------------------------------------------------------------------------------
1 | A7A6E445A44F858AC50918716000504A6ECA104A38EE41A11D95AA308E2481E4
2 | comodoca.com
3 | 8d813378cf0c296
4 |
--------------------------------------------------------------------------------
/server.py:
--------------------------------------------------------------------------------
1 | import sys
2 | from gunicorn.app.wsgiapp import run
3 | if __name__ == '__main__':
4 | sys.argv = "gunicorn --bind 0.0.0.0:5151 app:app".split()
5 | sys.exit(run())
6 |
--------------------------------------------------------------------------------
/static/favicon/site.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "builds": [
4 | {
5 | "src": "main.py",
6 | "use": "@vercel/python"
7 | }
8 | ],
9 | "routes": [
10 | {
11 | "src": "/(.*)",
12 | "dest": "/main.py"
13 | }
14 | ],
15 | "env": {
16 | "FLASK_ENV": "production",
17 | "FLASK_APP": "main.py"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | email-validator==1.3.1
2 | Flask==2.3.1
3 | Flask-Limiter==3.3.0
4 | Flask-Mail==0.9.1
5 | Flask-Migrate==4.0.4
6 | Flask-SQLAlchemy==3.0.3
7 | Flask-Toastr==0.5.8
8 | Flask-WTF==1.1.1
9 | pysafeguard==1.0.2
10 | requests==2.28.2
11 | SQLAlchemy==2.0.7
12 | Werkzeug==2.3.4
13 | WTForms==3.0.1
14 | gunicorn>=20.1.0
15 | Flask-Compress==1.13
16 | pyScss==1.4.0
17 | jsmin==3.0.1
18 | cssmin==0.2.0
19 | Flask-Assets==2.0
20 | Flask-Caching==2.0.2
21 |
--------------------------------------------------------------------------------
/static/img/svg/Facebook.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/static/js/main.js:
--------------------------------------------------------------------------------
1 | function copyToClipboard(){document.getElementById("shortened-url").select(),document.execCommand("copy");var o=document.getElementById("copy-toast");o.classList.add("show"),setTimeout(function(){o.classList.remove("show")},3e3)}function onScroll(o){lastScrollY=window.scrollY,scheduledAnimationFrame||(scheduledAnimationFrame=!0,requestAnimationFrame(readAndUpdatePage))}window.addEventListener("scroll",onScroll);const tooltipTriggerList=document.querySelectorAll('[data-bs-toggle="tooltip"]'),tooltipList=[...tooltipTriggerList].map(o=>new bootstrap.Tooltip(o));
2 |
--------------------------------------------------------------------------------
/static/img/svg/LinkedIn.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/static/css/style.css:
--------------------------------------------------------------------------------
1 | *,:after,:before{box-sizing:inherit;font-family:"IBM Plex Sans";font-display:swap}html{height:100%;box-sizing:border-box}body{background-color:#fdfdfd;color:#3a3a3a;min-height:100%;position:relative}h1,h2,h3,h4,h5,h6{font-weight:700}.input-group .btn{border-top-left-radius:0;border-bottom-left-radius:0}.toast{position:fixed;top:80px;right:20px;width:200px;z-index:1}.text-bg-blue{background-color:#4169e1!important;color:#fff!important}.card.text-bg-blue{border-color:#4169e1!important}.text-blue{color:#4169e1}.features svg{fill:#555!important;height:50px}.socials img{transition:.2s ease-in-out;filter:grayscale(1)}.socials img:hover{filter:grayscale(0)}
2 |
--------------------------------------------------------------------------------
/static/scss/main.scss:
--------------------------------------------------------------------------------
1 | *,
2 | *:before,
3 | *:after {
4 | box-sizing: inherit;
5 | font-family: "IBM Plex Sans";
6 | font-display: swap;
7 | }
8 | html {
9 | height: 100%;
10 | box-sizing: border-box;
11 | }
12 | body {
13 | background-color: #fdfdfd;
14 | color: #3a3a3a;
15 | min-height: 100%;
16 | position: relative;
17 | }
18 | h1,
19 | h2,
20 | h3,
21 | h4,
22 | h5,
23 | h6 {
24 | font-weight: 700;
25 | }
26 | .input-group {
27 | .btn {
28 | border-top-left-radius: 0;
29 | border-bottom-left-radius: 0;
30 | }
31 | }
32 | .toast {
33 | position: fixed;
34 | top: 80px;
35 | right: 20px;
36 | width: 200px;
37 | z-index: 1;
38 | }
39 | .text-bg-blue {
40 | background-color: #4169e1 !important;
41 | color: #ffffff !important;
42 | }
43 | .card {
44 | &.text-bg-blue {
45 | border-color: #4169e1 !important;
46 | }
47 | }
48 | .text-blue {
49 | color: #4169e1;
50 | }
51 | .features {
52 | svg {
53 | fill: #555 !important;
54 | height: 50px;
55 | }
56 | }
57 | .socials {
58 | img {
59 | transition: ease-in-out 0.2s;
60 | filter: grayscale(1);
61 | &:hover {
62 | filter: grayscale(0);
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 M. Khaidar
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/static/img/svg/Twitter.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/static/img/svg/Google.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/static/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 | 24 | My Name is 25 | M. Khaidar, I am dedicated to providing you with the best solutions for shortening and managing your URLs. As a solo developer, I have 35 | utilized cutting-edge technology such as Python, Flask, SQLite, and Bootstrap to create a fast and reliable service that is both 36 | easy to use and visually appealing. 37 |
38 |39 | I pride myself on my commitment to customer satisfaction and strive to create a seamless user experience using the latest web 40 | development frameworks. My mission is to help businesses and individuals save time and increase productivity by simplifying the 41 | process of managing and sharing URLs. 42 |
43 |44 | Whether you need to shorten URLs for social media or track clicks for marketing campaigns, my platform provides a simple and 45 | effective solution that is tailored to your needs. I understand the importance of reliable and secure URL management, and that's why 46 | I have taken all necessary measures to ensure the safety of your data. 47 |
48 |Thank you for choosing my service, and I look forward to serving you!
49 |32 | Original URL : 33 | {{ original_url }} 36 |
37 |Total clicked : {{ clicked }}
38 | 39 |Note :
42 |
43 | To view how many clicks on a Shortened URL at another time, make sure you have bookmarked this page or copied the
44 | link to this page. Because you do not have a dashboard to monitor user statistics who have visited your Shortened
45 | URL.
46 | You can also regenerate the link to create a new Shortened URL.
47 |
14 | This Privacy Policy describes how we collect, use, and share information about you when you use our website. By accessing or using 15 | our website, you agree to this Privacy Policy. 16 |
17 | Information We Collect 18 |We may collect information about you when you use our website. This information may include:
19 |We may use the information we collect about you to:
32 |We may share information about you in the following circumstances:
40 |51 | We take reasonable measures to protect your personal information from loss, theft, misuse, and unauthorized access, disclosure, 52 | alteration, and destruction. 53 |
54 | Changes to Privacy Policy 55 |56 | We may update this Privacy Policy from time to time. We encourage you to review this Privacy Policy periodically to stay informed 57 | about our information practices. 58 |
59 | Contact Us 60 |If you have any questions or concerns about our Privacy Policy, please contact us at haidar038@gmail.com
61 |7 | Thank you for visiting my contact page. I do not provide a contact form on this page, but you can still reach me 8 | through my social media accounts. Please visit my social media accounts to provide feedback, suggestions, or 9 | questions related to the services I provide. I will be happy to hear from you and will respond to your message 10 | as soon as possible. Thank you for your visit and I hope to provide you with the best service possible. 11 |
12 | 13 |Shorten your links, lengthen your reach with ShortLink
14 | 29 |Easy to use
50 |The URL shortened as well
58 |This is secure
69 |Responsive to all devices
99 |14 | These Terms of Use (the "Terms") govern your use of the website and services offered by ShortLink (the "Service"). Please read these 15 | Terms carefully before using the Service. By accessing or using the Service, you agree to be bound by these Terms. 16 |
17 |You may use the Service only for lawful purposes and in accordance with these Terms. You agree not to use the Service:
21 |39 | The Service allows you to submit, upload, publish, or otherwise make available content, including but not limited to text, 40 | photographs, videos, and links (collectively, "User Content"). You retain ownership of any intellectual property rights that 41 | you hold in the User Content. By submitting User Content to the Service, you grant ShortLink a non-exclusive, transferable, 42 | sub-licensable, royalty-free, worldwide license to use, copy, modify, create derivative works based on, distribute, publicly 43 | display, publicly perform, and otherwise exploit in any manner such User Content in all formats and distribution channels 44 | now known or hereafter devised (including in connection with the Service and ShortLink's business and on third-party sites 45 | and services), without further notice to or consent from you, and without the requirement of payment to you or any other 46 | person or entity. 47 |
48 |52 | The Service and its entire contents, features, and functionality (including but not limited to all information, software, 53 | text, displays, images, video, and audio, and the design, selection, and arrangement thereof), are owned by Shorten Your 54 | URL, its licensors, or other providers of such material and are protected by United States and international copyright, 55 | trademark, patent, trade secret, and other intellectual property or proprietary rights laws. 56 |
57 |61 | THE SERVICE IS PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS, WITHOUT ANY WARRANTIES OF ANY KIND, EITHER EXPRESS OR 62 | IMPLIED. ShortLink DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, IMPLIED WARRANTIES OF 63 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. ShortLink DOES NOT REPRESENT OR WARRANT THAT 64 | THE SERVICE WILL BE UNINTERRUPTED, ERROR-FREE, SECURE, OR FREE FROM VIRUSES OR OTHER HARMFUL COMPONENTS. 65 |
66 |70 | IN NO EVENT WILL ShortLink, ITS AFFILIATES, LICENSORS, SERVICE PROVIDERS, EMPLOYEES, AGENTS, OFFICERS, OR DIRECTORS BE 71 | LIABLE FOR DAMAGES OF ANY KIND, UNDER ANY LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH YOUR USE, OR INABILITY TO USE, 72 | THE SERVICE, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT 73 | LIMITED TO, PERSONAL INJURY, PAIN AND SUFFERING, EMOTIONAL DISTRESS, LOSS OF REVENUE, LOSS OF PROFITS, LOSS OF BUSINESS OR 74 | ANTICIPATED SAVINGS, LOSS OF USE, LOSS OF GOODWILL, LOSS OF DATA, AND WHETHER CAUSED BY TORT (INCLUDING NEGLIGENCE), BREACH 75 | OF CONTRACT, OR OTHERWISE, EVEN IF FORESEEABLE. 76 |
77 |81 | You agree to defend, indemnify, and hold harmless ShortLink, its affiliates, licensors, and service providers, and its and 82 | their respective officers, directors, employees, contractors, agents, licensors, suppliers, successors, and assigns from and 83 | against any claims, liabilities, damages, judgments, awards, losses, costs, expenses, or fees (including reasonable 84 | attorneys' fees) arising out of or relating to your violation of these Terms or your use of the Service, including, but not 85 | limited to, your User Content, any use of the Service's content, services, and products other than as expressly authorized 86 | in these Terms, or your use of any information obtained from the Service. 87 |
88 |92 | ShortLink reserves the right, in its sole discretion, to modify or replace any of these Terms at any time. It is your 93 | responsibility to check these Terms periodically for changes. Your continued use of the Service following the posting of any 94 | changes to these Terms constitutes acceptance of those changes. 95 |
96 |100 | ShortLink may terminate your access to all or any part of the Service at any time, with or without cause, with or without 101 | notice, effective immediately. If you wish to terminate these Term, you may simply discontinue using the Service. 102 |
103 |107 | These Terms and your use of the Service shall be governed by and construed in accordance with the laws of the Indonesia, 108 | without giving effect to any principles of conflicts of law. 109 |
110 |114 | These Terms constitute the entire agreement between you and ShortLink with respect to the use of the Service and supersede 115 | all prior or contemporaneous communications and proposals, whether oral or written, between you and Shorten Your URL with 116 | respect to the Service. 117 |
118 |122 | If you have any questions about these Terms, please contact ShortLink at 123 | this page. 124 |
125 |