PageSourceSearch

https://gaviru.vercel.app/

html gaviru.vercel.app collected 2026-10-03 06:59:22 UTC 7,245 bytes, 162 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5  <meta charset="UTF-8" />
6  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
8  <!-- Anti-FOUC: set theme class synchronously before React hydrates (default: dark) -->
9  
9<script>
10    (function() {
11      var stored = localStorage.getItem('theme');
12      if (stored !== 'light') {
13        document.documentElement.classList.add('dark');
14      } else {
15        document.documentElement.classList.remove('dark');
16      }
17    })();
18  </script>
18
19
20  <!-- Google Tag Manager -->
21  
21<script>
vendor: 426 bytes, lines 21-28
21(function (w, d, s, l, i) {
22      w[l] = w[l] || []; w[l].push({
23        'gtm.start':
24          new Date().getTime(), event: 'gtm.js'
25      }); var f = d.getElementsByTagName(s)[0],
26        j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
27          'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
28    })(window, document, 'script', 'dataLayer', '
28GTM-N8R29DPK
vendor: 3 bytes, line 28
28');
28</script>
28
29  <!-- End Google Tag Manager -->
30
31  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
32  <!-- Preload Hero LCP Image for instant discovery -->
33  <link rel="preload" as="image" href="/images/profile-picture.webp" type="image/webp" fetchpriority="high" />
34  
35  <title>Gaviru Bihan | Developer, SEO Enthusiast & Writer</title>
36  <meta name="description" content="Gaviru Bihan — Developer, SEO Enthusiast, and Tech Writer. Founder of Neovise and CIS Undergraduate at Sabaragamuwa University of Sri Lanka." />
37  <meta name="keywords" content="Gaviru Bihan, Web Developer, SEO Enthusiast, Technical Writer, Neovise, Android Wedakarayo, Sri Lanka Developer, Ghost CMS, React Developer" />
38  <meta name="theme-color" content="#0A0E14" />
39  <link rel="canonical" href="https://gaviru.vercel.app/" />
40
41  <!-- Open Graph / Facebook / WhatsApp / LinkedIn / Discord -->
42  <meta property="og:type" content="website" />
43  <meta property="og:site_name" content="Gaviru Bihan" />
44  <meta property="og:url" content="https://gaviru.vercel.app/" />
45  <meta property="og:title" content="Gaviru Bihan | Developer, SEO Enthusiast & Writer" />
46  <meta property="og:description" content="Gaviru Bihan — Developer, SEO Enthusiast, and Tech Writer. Founder of Neovise and CIS Undergraduate at Sabaragamuwa University of Sri Lanka." />
47  <meta property="og:image" content="https://gaviru.vercel.app/images/Site-Preview.webp" />
48  <meta property="og:image:secure_url" content="https://gaviru.vercel.app/images/Site-Preview.webp" />
49  <meta property="og:image:type" content="image/webp" />
50  <meta property="og:image:width" content="1200" />
51  <meta property="og:image:height" content="675" />
52  <meta property="og:image:alt" content="Gaviru Bihan - Portfolio Preview" />
53
54  <!-- Twitter / X Cards -->
55  <meta name="twitter:card" content="summary_large_image" />
56  <meta name="twitter:url" content="https://gaviru.vercel.app/" />
57  <meta name="twitter:title" content="Gaviru Bihan | Developer, SEO Enthusiast & Writer" />
58  <meta name="twitter:description" content="Gaviru Bihan — Developer, SEO Enthusiast, and Tech Writer. Founder of Neovise and CIS Undergraduate at Sabaragamuwa University of Sri Lanka." />
59  <meta name="twitter:image" content="https://gaviru.vercel.app/images/Site-Preview.webp" />
60  <meta name="twitter:image:alt" content="Gaviru Bihan - Portfolio Preview" />
61
62  <!-- Fonts: Inter Tight (display/hero), Inter (body), JetBrains Mono, Noto Sans Sinhala -->
63  <link rel="preconnect" href="https://fonts.googleapis.com">
64  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
65  <link
66    href="https://fonts.googleapis.com/css2?family=Inter+Tight:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Noto+Sans+Sinhala:wght@400;500;600;700&display=swap"
67    rel="stylesheet">
68
69  <!-- Tailwind CSS CDN -->
70  
70<script src="https://cdn.tailwindcss.com"></script>
70
71  
71<script>
72    tailwind.config = {
73      darkMode: 'class',
74      theme: {
75        extend: {
76          fontFamily: {
77            sans: ['Inter', 'Noto Sans Sinhala', 'sans-serif'],
78            display: ['Inter Tight', 'Inter', 'sans-serif'],
79            mono: ['JetBrains Mono', 'Courier New', 'monospace'],
80            sinhala: ['Inter', 'Noto Sans Sinhala', 'sans-serif'],
81          },
82          colors: {
83            base: 'var(--bg-base)',
84            surface: 'var(--bg-surface)',
85            'surface-2': 'var(--bg-surface-2)',
86            'border-subtle': 'var(--border-subtle)',
87            'border-medium': 'var(--border-medium)',
88            'text-primary': 'var(--text-primary)',
89            'text-secondary': 'var(--text-secondary)',
90            'text-tertiary': 'var(--text-tertiary)',
91            'accent-primary': 'var(--accent-primary)',
92            'accent-primary-hover': 'var(--accent-primary-hover)',
93            'accent-secondary': 'var(--accent-secondary)',
94            'accent-success': 'var(--accent-success)',
95            'accent-warn': 'var(--accent-warn)',
96            'accent-danger': 'var(--accent-danger)',
97            border: {
98              subtle: 'var(--border-subtle)',
99              medium: 'var(--border-medium)',
100            },
101            text: {
102              primary: 'var(--text-primary)',
103              secondary: 'var(--text-secondary)',
104              tertiary: 'var(--text-tertiary)',
105            },
106            accent: {
107              primary: 'var(--accent-primary)',
108              secondary: 'var(--accent-secondary)',
109              success: 'var(--accent-success)',
110              warn: 'var(--accent-warn)',
111              danger: 'var(--accent-danger)',
112            },
113          },
114          borderRadius: {
115            sm: 'var(--radius-sm)',
116            md: 'var(--radius-md)',
117            lg: 'var(--radius-lg)',
118            xl: 'var(--radius-xl)',
119            '2xl': 'var(--radius-2xl)',
120          },
121          transitionDuration: {
122            fast: '150ms',
123            base: '200ms',
124            slow: '300ms',
125          },
126          maxWidth: {
127            portfolio: 'var(--max-width)',
128          },
129        },
130      },
131    }
132  </script>
132
133
134  <!-- Portfolio Design System -->
135  
135<script type="importmap">
136{
137  "imports": {
138    "react": "https://aistudiocdn.com/react@^19.1.1",
139    "react-dom/": "https://aistudiocdn.com/react-dom@^19.1.1/",
140    "react/": "https://aistudiocdn.com/react@^19.1.1/",
141    "react-icons/": "https://aistudiocdn.com/react-icons@^5.5.0/",
142    "react-icons": "https://aistudiocdn.com/react-icons@^5.5.0",
143    "framer-motion": "https://aistudiocdn.com/framer-motion@^12.23.12",
144    "@emailjs/browser": "https://aistudiocdn.com/@emailjs/browser@^4.4.1",
145    "react-type-animation": "https://aistudiocdn.com/react-type-animation@^3.2.0"
146  }
147}
148</script>
148
149  
149<script type="module" crossorigin src="/assets/index-tb-WYDuQ.js"></script>
149
150  <link rel="stylesheet" crossorigin href="/assets/index-CbZC-qcV.css">
151</head>
152
153<body>
154  <!-- Google Tag Manager (noscript) -->
vendor: 70 bytes, lines 154-155
154
155  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
155GTM-N8R29DPK
vendor: 91 bytes, lines 155-157
155" height="0" width="0"
156      style="display:none;visibility:hidden"></iframe></noscript>
157  
157<!-- End Google Tag Manager (noscript) -->
158  <div id="root"></div>
159
160</body>
161
162</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.