Repository: LinkStackOrg/LinkStack (language: php)

Issue:
Use alternatives to Google services in this project
I think it would be way better for privacy, to use alternatives to Google's favicon API and Google Fonts.

DuckDuckGo's favicon API:
Here is a quick demo for the littlelink-custom website:
https://icons.duckduckgo.com/ip3/www.littlelink-custom.com.ico
![](https://icons.duckduckgo.com/ip3/www.littlelink-custom.com.ico)

[Bunny Fonts](https://fonts.bunny.net):
https://fonts.bunny.net/faq
https://fonts.bunny.net/about


Discussion / hints:
Yessss, this is perfect!

I will change this in a sec.
Wait a minute please, I am editing this issue right now...
OK, I also added Bunny Fonts. Now my issue is complete 😄 
If it is ok for you, I am already working on replacing Google with the alternatives in the code.
I will then open a PR.
> If it is ok for you, I am already working on replacing Google with the alternatives in the code. I will then open a PR.

Awesome, thank you!

<br><br>

I'm working on replacing the favicon API, but I'm having difficulties doing so. 

As far as I can tell, it is only possible to use this with `https://icons.duckduckgo.com/ip3/duck.com.ico` and not `https://icons.duckduckgo.com/ip3/https://duck.com.ico` as it previously was.
This means I had to write a function that strips the protocol prefix from the URLs, and that is working fine.

However, this API cannot retrieve a dynamically generated favicon, so using any LLC instance as a website for example would not produce a favicon.
![chrome_6GB7e1Ypzb](https://user-images.githubusercontent.com/60265788/184919438-d379169b-a1cd-4dd6-9bc1-46a5cf1bbdfa.png)

I am sorry, but I actually don't know what a dynamically generated favicon is (and for what it is used for in LLC...)
I just read their help site for favicons: https://help.duckduckgo.com/duckduckgo-help-pages/privacy/favicons
It says, that favicons update every few weeks.
A dynamically generated favicon is a favicon that is generated by a script or program on the server, rather than being a static image.

This appears to not be compatible with the DuckDuckGo API, so some websites might not work as they previously did.

I think this is probably still a sacrifice worth doing to get away from the Google ecosystem and improve privacy.
Ok, now I understand.
DDG also offers a contact for problems, so that would be a way to ask if they could add support for dynamically generated favicons: https://help.duckduckgo.com/duckduckgo-help-pages/company/contact-us

Fix patch:
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index f8617352d..6856d3384 100755
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -23,7 +23,7 @@
   <!-- Custom icons font-awesome -->
   <link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.1.2/css/all.css" integrity="sha384-fZCoUih8XsaUZnNDOiLqnby1tMJ0sE7oBbNk2Xxf5x8Z4SvNQ9j83vFMa/erbVrV" crossorigin="anonymous"/>
 
-  <link href="//fonts.googleapis.com/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
+  <link href="//fonts.bunny.net/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
   <link rel="stylesheet" href="{{ asset('littlelink/css/normalize.css') }}">
   <link rel="stylesheet" href="{{ asset('littlelink/css/animate.css') }}">
   @if(file_exists(base_path("littlelink/images/avatar.png" )))
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
index 0c447822c..394f59161 100755
--- a/resources/views/layouts/app.blade.php
+++ b/resources/views/layouts/app.blade.php
@@ -11,7 +11,7 @@
         <title>{{ config('app.name') }}</title>
 
         <!-- Fonts -->
-        <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
+        <link rel="stylesheet" href="//fonts.bunny.net/css2?family=Nunito:wght@400;600;700&display=swap">
 
         <!-- Styles -->
         <link rel="stylesheet" href="{{ asset('css/app.css') }}">
diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php
index 722840c93..55fd5b735 100755
--- a/resources/views/layouts/guest.blade.php
+++ b/resources/views/layouts/guest.blade.php
@@ -17,7 +17,7 @@
         <title>{{ config('app.name') }}</title>
 
         <!-- Fonts -->
-        <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
+        <link rel="stylesheet" href="https://fonts.bunny.net/css2?family=Nunito:wght@400;600;700&display=swap">
 
         <!-- Styles -->
         <link rel="stylesheet" href="{{ asset('css/app.css') }}">
diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php
index 47850b112..74d566692 100755
--- a/resources/views/layouts/sidebar.blade.php
+++ b/resources/views/layouts/sidebar.blade.php
@@ -10,7 +10,7 @@
     <link rel="stylesheet" href="{{ asset('littlelink/css/hover-min.css') }}">
     <link rel="stylesheet" href="{{ asset('littlelink/css/animate.css') }}">
 
-    <link href="//fonts.googleapis.com/css?family=Poppins:300,400,500,600,700,800,900" rel="stylesheet">
+    <link href="//fonts.bunny.net/css?family=Poppins:300,400,500,600,700,800,900" rel="stylesheet">
 	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css">
   <!-- begin dark mode detection -->
 	<script src="{{ asset('littlelink/js/js.cookie.min.js') }}"></script>
diff --git a/resources/views/layouts/updater.blade.php b/resources/views/layouts/updater.blade.php
index 6601cde30..86c829100 100644
--- a/resources/views/layouts/updater.blade.php
+++ b/resources/views/layouts/updater.blade.php
@@ -11,7 +11,7 @@
 @stack('updater-head')
 
   <title>Update</title>
-  <link href="//fonts.googleapis.com/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
+  <link href="//fonts.bunny.net/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
   <link rel="stylesheet" href="{{ asset('littlelink/css/normalize.css') }}">
   <link rel="stylesheet" href="{{ asset('littlelink/css/brands.css') }}">
   <link rel="stylesheet" href="{{ asset('littlelink/css/hover-min.css') }}">
diff --git a/resources/views/littlelink.blade.php b/resources/views/littlelink.blade.php
index 778793695..060fe05a9 100644
--- a/resources/views/littlelink.blade.php
+++ b/resources/views/littlelink.blade.php
@@ -54,7 +54,7 @@
   <!-- Custom icons font-awesome -->
   <link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.1.2/css/all.css" integrity="sha384-fZCoUih8XsaUZnNDOiLqnby1tMJ0sE7oBbNk2Xxf5x8Z4SvNQ9j83vFMa/erbVrV" crossorigin="anonymous"/>
 
-  <link href="//fonts.googleapis.com/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
+  <link href="//fonts.bunny.net/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
   <link rel="stylesheet" href="{{ asset('littlelink/css/normalize.css') }}">
   <link rel="stylesheet" href="{{ asset('littlelink/css/animate.css') }}">
   @if(file_exists(base_path("littlelink/images/avatar.png" )))
diff --git a/resources/views/maintenance.blade.php b/resources/views/maintenance.blade.php
index 46d2724d7..b268bb0f5 100644
--- a/resources/views/maintenance.blade.php
+++ b/resources/views/maintenance.blade.php
@@ -20,7 +20,7 @@
   <!-- Custom icons font-awesome -->
   <link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.1.2/css/all.css" integrity="sha384-fZCoUih8XsaUZnNDOiLqnby1tMJ0sE7oBbNk2Xxf5x8Z4SvNQ9j83vFMa/erbVrV" crossorigin="anonymous"/>
 
-  <link href="//fonts.googleapis.com/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
+  <link href="//fonts.bunny.net/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
   <link rel="stylesheet" href="{{ asset('littlelink/css/normalize.css') }}">
   <link rel="stylesheet" href="{{ asset('littlelink/css/animate.css') }}">
   @if(file_exists(base_path("littlelink/images/avatar.png" )))
diff --git a/resources/views/pages.blade.php b/resources/views/pages.blade.php
index 8b26fe4d5..03be9440e 100755
--- a/resources/views/pages.blade.php
+++ b/resources/views/pages.blade.php
@@ -7,7 +7,7 @@
 
   <title>{{ config('app.name') }}</title>
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <link href="//fonts.googleapis.com/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
+  <link href="//fonts.bunny.net/css?family=Open+Sans:400,600,800&display=swap" rel="stylesheet">
   <style>@font-face{font-family:'ll';src:url({{ asset('littlelink/fonts/littlelink-custom.otf') }}) format("opentype")}</style>
   <link rel="stylesheet" href="{{ asset('littlelink/css/normalize.css') }}">
   <link rel="stylesheet" href="{{ asset('littlelink/css/brands.css') }}">
diff --git a/resources/views/studio/add-link.blade.php b/resources/views/studio/add-link.blade.php
index df9431a80..c2da12a5e 100755
--- a/resources/views/studio/add-link.blade.php
+++ b/resources/views/studio/add-link.blade.php
@@ -8,7 +8,7 @@
         @csrf
         <div class="form-group col-lg-8">
           <label>Link*</label>
-          <input type="text" name="link" class="form-control" placeholder="https://google.com" required>
+          <input type="text" name="link" class="form-control" placeholder="https://example.com" required>
         </div>
         <div class="form-group col-lg-8">
           <label>Title</label>
diff --git a/resources/views/studio/edit-link.blade.php b/resources/views/studio/edit-link.blade.php
index 1168558af..3a4aafd6e 100755
--- a/resources/views/studio/edit-link.blade.php
+++ b/resources/views/studio/edit-link.blade.php
@@ -8,11 +8,11 @@
         @csrf
         <div class="form-group col-lg-8">
           <label>Link</label>
-          <input type="text" name="link" value="{{ $link }}" class="form-control" placeholder="https://google.com" required>
+          <input type="text" name="link" value="{{ $link }}" class="form-control" placeholder="https://example.com" required>
         </div>
         <div class="form-group col-lg-8">
           <label>Title</label>
-          <input type="text" name="title" value="{{ $title }}" class="form-control" placeholder="Google">
+          <input type="text" name="title" value="{{ $title }}" class="form-control" placeholder="Example">
         </div>
         <div class="form-group col-lg-8">
           <label for="exampleFormControlSelect1">Button</label>
diff --git a/themes/galaxy/skeleton-auto.css b/themes/galaxy/skeleton-auto.css
index 3da37824c..7a44c9ce2 100644
--- a/themes/galaxy/skeleton-auto.css
+++ b/themes/galaxy/skeleton-auto.css
@@ -58,7 +58,7 @@
   html is set to 62.5% so that all the REM measurements throughout Skeleton
   are based on 10px sizing. So basically 1.5rem = 15px :) */
   
-  @import url('https://fonts.googleapis.com/css?family=Karla:400,700&display=swap');
+  @import url('https://fonts.bunny.net/css?family=Karla:400,700&display=swap');
 
   html {
     font-size: 100%; }
diff --git a/themes/mono/brands.css b/themes/mono/brands.css
index c85f950cd..07bbf1e63 100644
--- a/themes/mono/brands.css
+++ b/themes/mono/brands.css
@@ -8,7 +8,7 @@
 
 */
 
-@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap');
+@import url('https://fonts.bunny.net/css2?family=Roboto+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap');
 
 body{
   color: white !important;


Test patch: