add blog post back to website

This commit is contained in:
MuslemRahimi 2025-01-16 12:36:56 +01:00
parent 84c70cd287
commit f4f68a2d6c
11 changed files with 321 additions and 428 deletions

View File

@ -92,6 +92,42 @@
-->
</div>
<div class="flex-1 mb-2 sm:mb-0">
<p class="uppercase text-slate-100 md:mb-6">Sections</p>
<ul class="list-reset mb-6">
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/stocks"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Stocks</a
>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/etf"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>ETFs</a
>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/blog"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Blog</a
>
</li>
<!--
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/donation"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Learning Center</a
>
</li>
-->
</ul>
</div>
<div class="flex-1 mb-2 sm:mb-0">
<p class="uppercase text-slate-100 md:mb-6">Services</p>
<ul class="list-reset mb-6">
@ -104,9 +140,9 @@
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/advertise"
href="/newsletter"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Advertise</a
>Free Newsletter</a
>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
@ -120,27 +156,28 @@
</div>
<div class="flex-1 mb-2 sm:mb-0">
<p class="uppercase text-slate-100 md:mb-6">Legal</p>
<p class="uppercase text-slate-100 md:mb-6">Website</p>
<ul class="list-reset mb-6">
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/terms-of-use"
href="/login"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Terms of Use</a
>Login</a
>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/privacy-policy"
href="/sitemap"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Privacy Policy</a
>
Sitemap
</a>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/imprint"
href="/advertise"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Imprint</a
>Advertise</a
>
</li>
</ul>
@ -165,13 +202,27 @@
Contact Us
</a>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/sitemap"
href="/terms-of-use"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Terms of Use</a
>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/privacy-policy"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Privacy Policy</a
>
</li>
<li class="mt-2 inline-block mr-2 md:block md:mr-0">
<a
href="/imprint"
class="no-underline sm:hover:underline text-gray-100 sm:hover:text-blue-400"
>Imprint</a
>
Sitemap
</a>
</li>
<!--
<li class="mt-2 inline-block mr-2 md:block md:mr-0">

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

View File

@ -0,0 +1,4 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://imagecompressor.com/
HostUrl=https://imagecompressor.com/download/14lao7515uhpe1k0/file_og81ulb1md5krt1k6agg91hav1/Screenshot%202025-01-16%20112032-min.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -2,52 +2,14 @@
import { articleId, numberOfUnreadNotification } from "$lib/store";
import { goto } from "$app/navigation";
import { getImageURL } from "$lib/utils";
import ArrowLogo from "lucide-svelte/icons/move-up-right";
export let data;
let cloudFrontUrl = import.meta.env.VITE_IMAGE_URL;
function blogSelector(state: string) {
$articleId = state;
goto("/blog/article/" + $articleId);
}
/*
let allBlogPosts = [
{
'title': 'How the Stock Market is Corrupted by Market Makers',
'description': `If you've explored the stock market, you've probably heard of "Market Makers." In this article, we'll break down what Market Makers are and discuss why they faced allegations of corruption during the GameStop Rally.`,
'created': '2023-11-04',
'username': 'mrahimi',
'userId': 'db5s41oatgoeh0q',
'link': 'how-the-stock-market-is-corrupted-by-market-makers',
'readingTime': '4',
'image': coverLogo1,
},
{
'title': `Ken Griffin's Vision for Miami: A Financial Hub Rivaling New York`,
'description': `Ken Griffin, the founder of Citadel hedge fund, foresees a transformative shift in the financial landscape, with Miami poised to surpass New York as a financial hub. Griffin, who is currently overseeing the construction of Citadel's $1 billion headquarters in Miami's Brickell Bay district, emphasizes the city's potential to outpace its northern counterpart.`,
'created': '2023-11-29',
'username': 'mrahimi',
'userId': 'db5s41oatgoeh0q',
'link': 'ken-griffin-vision-for-miami',
'readingTime': '2',
'image': coverLogo2,
},
{
'title': `Amazon's Expansion in Generative AI: A New Collaboration with Nvidia`,
'description': `During the recent AWS re:Invent event, Amazon (NASDAQ: AMZN) made significant strides in amplifying its AI capabilities, unveiling an array of innovative products centered around generative AI. Wedbush's latest report highlights Amazon's triple-layered strategy in the generative AI landscape, spanning infrastructure, foundational models, and applications.`,
'created': '2023-12-01',
'username': 'mrahimi',
'userId': 'db5s41oatgoeh0q',
'link': 'amazon-expansion-in-generative-ai',
'readingTime': '2',
'image': coverLogo3,
}
]
*/
let allBlogPosts = data?.getAllBlogPost;
</script>
@ -85,13 +47,6 @@ let allBlogPosts = [
<section
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden min-h-screen pb-20 pt-5 px-4 lg:px-3"
>
<div class="text-sm sm:text-[1rem] breadcrumbs">
<ul>
<li><a href="/" class="text-gray-300">Home</a></li>
<li class="text-gray-300">Stock Analysis Blog</li>
</ul>
</div>
<div class="w-full overflow-hidden m-auto mt-5">
<div class="sm:p-0 flex justify-center w-full m-auto overflow-hidden">
<div
@ -111,7 +66,7 @@ let allBlogPosts = [
class="flex flex-col overflow-hidden rounded-lg shadow-lg sm:hover:shadow-2xl border border-gray-600"
>
<div class="flex-shrink-0">
<a href="/article/yahoo-finance-alternatives/"
<a href={"/blog/article/" + item?.id}
><img
class="h-48 w-full object-cover"
src={getImageURL(
@ -119,8 +74,8 @@ let allBlogPosts = [
item?.id,
item?.cover,
)}
alt="Stock Research Close up Chart and Coffee"
loading="eager"
alt="Stock Analysis Blog Post Wallpaper"
loading="lazy"
/></a
>
</div>
@ -128,9 +83,7 @@ let allBlogPosts = [
class="flex flex-1 flex-col justify-between bg-table p-4 xs:p-5 sm:p-6"
>
<div class="flex-1">
<a
href="/article/yahoo-finance-alternatives/"
class="mt-2 block"
<a href={"/blog/article/" + item?.id} class="mt-2 block"
><h2 class="text-xl font-semibold text-white">
{item?.title}
</h2>
@ -142,23 +95,15 @@ let allBlogPosts = [
>
</div>
<div class="mt-6 flex items-center">
<div class="flex-shrink-0">
<img
class="h-10 w-10 rounded-full"
src="https://img.stockanalysis.com/cd35b0bc-8afb-4475-b42c-c6aebc4cd283/lincoln-olson.jpeg"
alt="Lincoln Olson profile image"
loading="eager"
/>
</div>
<div class="ml-3">
<p class="text-sm font-semibold text-white">
<a class="hover:underline">Lincoln Olson</a>
</p>
<div
class="flex space-x-1 text-sm text-gray-500 dark:text-muted"
<div class="flex space-x-1 text-sm text-white">
Published: <time datetime={item?.created} class="ml-1">
{new Date(item?.created)?.toLocaleString("en-US", {
month: "short",
day: "numeric",
year: "numeric",
daySuffix: "2-digit",
})}</time
>
<time datetime="2025-01-14">Jan 14, 2025</time>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,21 @@
export const load = async ({ locals, params }) => {
const { pb } = locals;
const getArticle = async () => {
const output = await pb
?.collection("articles")
?.getOne(params?.slug, { expand: "user" });
return output;
};
// Make sure to return a promise
return {
getArticle: await getArticle(),
};
};

View File

@ -0,0 +1,123 @@
<script>
import { numberOfUnreadNotification } from "$lib/store";
import { getImageURL } from "$lib/utils";
export let data;
const article = data?.getArticle;
</script>
<svelte:head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
{article?.title} · stocknear</title
>
<meta
name="description"
content="Latest articles on stocks, finance and investing"
/>
<!-- Other meta tags -->
<meta property="og:title" content={article?.title} />
<meta property="og:description" content={article?.abstract} />
<meta property="og:type" content="article" />
<!-- Add more Open Graph meta tags as needed -->
<!-- Twitter specific meta tags -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={article?.title} />
<meta name="twitter:description" content={article?.abstract} />
<!-- Add more Twitter meta tags as needed -->
</svelte:head>
<div>
<main id="main" class="mt-2 text-white min-h-screen pb-40">
<div class="mx-auto max-w-screen-xl">
<img
src={getImageURL(article?.collectionId, article?.id, article?.cover)}
class="h-[200px] w-full object-cover lg:h-[350px]"
loading="lazy"
alt="Wallpaper"
/>
<div class="lg:flex">
<article
class="z-5 relative mx-1 -mt-10 rounded-t-md bg-default p-3 xs:p-4 lg:-mt-16 lg:ml-3 lg:p-5 xl:mx-4"
>
<header class="article-header">
<h1 class="mb-3 text-3xl font-bold text-white md:text-4xl">
{article?.title}
</h1>
<div class="text-base text-muted">
<div>
Published {new Date(article?.created)?.toLocaleString("en-US", {
month: "short",
day: "numeric",
year: "numeric",
daySuffix: "2-digit",
})}
</div>
</div>
</header>
<div class="text-lg mt-4">
<div class="content">
{@html article?.description}
</div>
</div>
</article>
<div class="mt-5 lg:w-full">
<div
class="flex flex-wrap gap-y-5 justify-center px-5 lg:sticky lg:top-20 lg:px-0"
>
{#if !data?.user}
<div
class="w-full text-white border border-gray-600 rounded-md h-fit bg-primary sm:hover:bg-secondary transition ease-out duration-100 lg:mx-0 lg:w-[300px] xl:w-[360px]"
>
<div class="space-y-6 p-6">
<h4 class="text-2xl font-bold">
Stay informed in just 2 minutes
</h4>
<p class="text-base text-white lg:text-lg">
Get a daily email with the top market-moving news in bullet
point format, for free.
</p>
<div>
<a
href="/register"
class=" btn bg-[#fff] border border-gray-600 sm:hover:bg-gray-300 transition duration-100 btn-md w-full rounded-md m-auto text-black font-semibold text-[1rem]"
>
<span class="text-[1rem]">Sign Up</span>
</a>
</div>
</div>
</div>
{/if}
<a
href="/watchlist/stocks"
class="w-full text-white border border-gray-600 rounded-md h-fit bg-primary sm:hover:bg-secondary transition ease-out duration-100 lg:mx-0 lg:w-[300px] xl:w-[360px]"
>
<div class="space-y-3 p-6">
<h4 class="text-xl font-semibold">Watchlist</h4>
<p class="text-base text-white lg:text-lg">
Build your watchlist to keep track of their performance
</p>
</div>
</a>
<a
href="/analysts/top-stocks"
class="w-full text-white border border-gray-600 rounded-md h-fit bg-primary sm:hover:bg-secondary transition ease-out duration-100 lg:mx-0 lg:w-[300px] xl:w-[360px]"
>
<div class="space-y-3 p-6">
<h4 class="text-xl font-semibold">Top Stocks</h4>
<p class="text-base text-white lg:text-lg">
Get the latest Top Wall Street Analyst Ratings
</p>
</div>
</a>
</div>
</div>
</div>
</div>
</main>
</div>

View File

@ -1,13 +1,15 @@
export const load = async ({ locals }) => {
const getETFList = async () => {
const getStockList = async () => {
const { apiKey, apiURL } = locals;
const postData = {'filterList': 'all-etf-tickers'}
// make the POST request to the endpoint
const response = await fetch(apiURL + "/all-etf-tickers", {
method: "GET",
const response = await fetch(apiURL + "/list-category", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": apiKey,
},
body: JSON.stringify(postData)
});
const output = await response.json();
@ -17,6 +19,6 @@ export const load = async ({ locals }) => {
// Make sure to return a promise
return {
getETFList: await getETFList(),
getStockList: await getStockList(),
};
};

View File

@ -1,34 +1,12 @@
<script lang="ts">
import { goto } from "$app/navigation";
import { numberOfUnreadNotification, screenWidth } from "$lib/store";
import { abbreviateNumber } from "$lib/utils";
import logo from "$lib/images/box_logo.png";
import { numberOfUnreadNotification } from "$lib/store";
import ArrowLogo from "lucide-svelte/icons/move-up-right";
import { onMount } from "svelte";
import Table from "$lib/components/Table/Table.svelte";
export let data;
let rawData = data?.getETFList;
let stockList = rawData?.slice(0, 50);
async function handleScroll() {
const scrollThreshold = document.body.offsetHeight * 0.8; // 80% of the website height
const isBottom = window.innerHeight + window.scrollY >= scrollThreshold;
if (isBottom && stockList?.length !== rawData?.length) {
const nextIndex = stockList?.length;
const filteredNewResults = rawData?.slice(nextIndex, nextIndex + 25);
stockList = [...stockList, ...filteredNewResults];
}
}
onMount(() => {
window.addEventListener("scroll", handleScroll);
return () => {
window.removeEventListener("scroll", handleScroll);
};
});
$: charNumber = $screenWidth < 640 ? 15 : 40;
let rawData = data?.getStockList;
</script>
<svelte:head>
@ -36,11 +14,11 @@
<meta name="viewport" content="width=device-width" />
<title>
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} List
of All ETF Ticker Symbols · Stocknear
of All Stock ETF Symbols · Stocknear
</title>
<meta
name="description"
content={`An overview of all the ETF symbols listed. Explore the ETF pages to learn about the funds price history, holdings, dividends and more.`}
content={`An overview of all the etf ticker symbols listed. Explore the stock pages to learn about the company's price history, financials, key stats, and more.`}
/>
<!-- Other meta tags -->
@ -50,7 +28,7 @@
/>
<meta
property="og:description"
content={`An overview of all the ETF symbols listed. Explore the ETF pages to learn about the funds price history, holdings, dividends and more.`}
content={`An overview of all the etf ticker symbols listed. Explore the stock pages to learn about the company's price history, financials, key stats, and more.`}
/>
<meta property="og:type" content="website" />
<!-- Add more Open Graph meta tags as needed -->
@ -63,15 +41,15 @@
/>
<meta
name="twitter:description"
content={`An overview of all the ETF symbols listed. Explore the ETF pages to learn about the funds price history, holdings, dividends and more.`}
content={`An overview of all the etf ticker symbols listed. Explore the stock pages to learn about the company's price history, financials, key stats, and more.`}
/>
<!-- Add more Twitter meta tags as needed -->
</svelte:head>
<section
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden min-h-screen pt-5 pb-40 lg:px-3"
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden min-h-screen pb-20 pt-5 px-4 lg:px-3"
>
<div class="text-sm sm:text-[1rem] breadcrumbs ml-4">
<div class="text-sm sm:text-[1rem] breadcrumbs">
<ul>
<li><a href="/" class="text-gray-300">Home</a></li>
<li class="text-gray-300">All ETFs</li>
@ -84,205 +62,80 @@
class="relative flex justify-center items-start overflow-hidden w-full"
>
<main class="w-full lg:w-3/4 lg:pr-5">
<div
class="w-full m-auto sm:bg-primary sm:rounded-xl h-auto pl-10 pr-10 pt-5 sm:pb-10 sm:pt-10 mt-3 mb-8"
>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-10">
<!-- Start Column -->
<div>
<div class="flex flex-row justify-center items-center">
<h1
class="text-3xl sm:text-4xl text-white text-center font-bold mb-5"
>
ETF Symbols
</h1>
</div>
<span
class="text-white text-md font-medium text-center flex justify-center items-center"
>
Collection of all ETF Symbols available
</span>
<!--
<label for="marketMoverInfo" class="cursor-pointer flex justify-center items-center mt-2">
<span class="text-white text-md font-medium">
Learn more
</span>
<svg class="w-6 h-6 inline-block ml-2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#000000"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <title></title> <g id="Complete"> <g id="info-circle"> <g> <circle cx="12" cy="12" data-name="--Circle" fill="none" id="_--Circle" r="10" stroke="#B46266" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></circle> <line fill="none" stroke="#B46266" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="12" x2="12" y1="12" y2="16"></line> <line fill="none" stroke="#B46266" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="12" x2="12" y1="8" y2="8"></line> </g> </g> </g> </g></svg>
</label>
-->
</div>
<!-- End Column -->
<!-- Start Column -->
<div
class="hidden sm:block relative m-auto mb-5 mt-5 sm:mb-0 sm:mt-0"
>
<svg
class="w-40 -my-5"
viewBox="0 0 200 200"
xmlns="http://www.w3.org/2000/svg"
>
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="5" result="glow" />
<feMerge>
<feMergeNode in="glow" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
</defs>
<path
fill="#1E40AF"
d="M57.6,-58.7C72.7,-42.6,81.5,-21.3,82,0.5C82.5,22.3,74.7,44.6,59.7,60.1C44.6,75.6,22.3,84.3,0,84.3C-22.3,84.2,-44.6,75.5,-61.1,60.1C-77.6,44.6,-88.3,22.3,-87.6,0.7C-86.9,-20.8,-74.7,-41.6,-58.2,-57.7C-41.6,-73.8,-20.8,-85.2,0.2,-85.4C21.3,-85.6,42.6,-74.7,57.6,-58.7Z"
transform="translate(100 100)"
filter="url(#glow)"
/>
</svg>
<div class="z-1 absolute top-0">
<img class="w-24 ml-9" src={logo} alt="logo" loading="lazy" />
</div>
</div>
<!-- End Column -->
</div>
<div class="mb-6 border-b-[2px]">
<h1 class="mb-1 text-white text-2xl sm:text-3xl font-bold">
All ETF Symbols
</h1>
<p class="mb-3 px-1 text-base font-semibold text-muted sm:px-0">
List of all {rawData?.length} ETF symbols we support
</p>
</div>
<div class="w-full mt-10 m-auto mb-10 bg-default pl-3 pr-3">
<div class="w-full m-auto mb-10 bg-default">
<!--Start Top Winners/Losers-->
<div class="flex flex-col justify-center items-center">
<div class="ml-4 text-start w-full text-white mb-2">
<span class="font-bold text-2xl">
{rawData?.length} ETFs
</span>
</div>
<div class="border-b mt-2 border-blue-400 w-full mb-4" />
<div class="w-full overflow-x-scroll">
<table
class="mt-5 table table-sm table-compact rounded-none sm:rounded-md w-full bg-table border border-gray-800 m-auto"
>
<thead>
<tr>
<th
class="text-white font-medium text-sm sm:text-[1rem] text-start"
>Symbol</th
>
<th class="text-white font-medium text-sm sm:text-[1rem]"
>Fund Name</th
>
<th
class="text-white font-medium text-end text-sm sm:text-[1rem]"
>Holdings</th
>
<th
class="text-white font-medium text-end text-sm sm:text-[1rem]"
>Total Assets</th
>
</tr>
</thead>
<tbody>
{#each stockList as item, index}
<tr
class="sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] odd:bg-odd border-b-[#09090B]"
>
<td
class="font-medium text-sm sm:text-[1rem] whitespace-nowrap border-b-[#09090B]"
>
<a
href={"/etf/" + item?.symbol}
class="sm:hover:text-white text-blue-400"
>
{item?.symbol}
</a>
</td>
<td
class="text-white whitespace-nowrap text-sm sm:text-[1rem] border-b-[#09090B]"
>
{item?.name?.length > charNumber
? item?.name?.slice(0, charNumber) + "..."
: item?.name}
</td>
<td
class="text-white text-end text-sm sm:text-[1rem] border-b-[#09090B]"
>
{item?.numberOfHoldings !== null
? abbreviateNumber(item?.numberOfHoldings)
: "-"}
</td>
<td
class="text-white whitespace-nowrap text-sm sm:text-[1rem] border-b-[#09090B] text-end"
>
{item?.totalAssets !== null
? abbreviateNumber(item?.totalAssets, true)
: "-"}
</td>
</tr>
{/each}
</tbody>
</table>
</div>
<Table {data} {rawData} />
</div>
</div>
</main>
<aside class="hidden lg:block relative fixed w-1/4 ml-4">
{#if data?.user?.tier !== "Pro" || data?.user?.freeTrial}
<div
on:click={() => goto("/pricing")}
class="w-full text-white border border-gray-600 rounded-md h-fit pb-4 mt-4 cursor-pointer bg-primary sm:hover:bg-secondary transition ease-out duration-100"
>
<div
<a
href="/pricing"
class="w-auto lg:w-full p-1 flex flex-col m-auto px-2 sm:px-0"
>
<div class="w-full flex justify-between items-center p-3 mt-3">
<h2 class="text-start text-xl font-semibold text-white ml-3">
Pro Subscription 🔥
Pro Subscription
</h2>
<ArrowLogo class="w-8 h-8 mr-3 flex-shrink-0" />
</div>
<span class="text-white p-3 ml-3 mr-3">
Upgrade now for unlimited access to all data and tools
</span>
</div>
</a>
</div>
{/if}
<div
on:click={() => goto("/analysts")}
class="w-full text-white border border-gray-600 rounded-md h-fit pb-4 mt-4 cursor-pointer bg-primary sm:hover:bg-secondary transition ease-out duration-100"
>
<div class="w-auto lg:w-full p-1 flex flex-col m-auto px-2 sm:px-0">
<a
href="/analysts"
class="w-auto lg:w-full p-1 flex flex-col m-auto px-2 sm:px-0"
>
<div class="w-full flex justify-between items-center p-3 mt-3">
<h2 class="text-start text-xl font-semibold text-white ml-3">
Top Analyst 📊
Top Analyst
</h2>
<ArrowLogo class="w-8 h-8 mr-3 flex-shrink-0" />
</div>
<span class="text-white p-3 ml-3 mr-3">
Get the latest top Wall Street analyst ratings
</span>
</div>
</a>
</div>
<div
on:click={() => goto("/analysts/top-stocks")}
class="w-full text-white border border-gray-600 rounded-md h-fit pb-4 mt-4 cursor-pointer bg-primary sm:hover:bg-secondary transition ease-out duration-100"
>
<div class="w-auto lg:w-full p-1 flex flex-col m-auto px-2 sm:px-0">
<a
href="/analysts/top-stocks"
class="w-auto lg:w-full p-1 flex flex-col m-auto px-2 sm:px-0"
>
<div class="w-full flex justify-between items-center p-3 mt-3">
<h2 class="text-start text-xl font-semibold text-white ml-3">
Top Stocks Picks ⭐
Top Stocks Picks
</h2>
<ArrowLogo class="w-8 h-8 mr-3 flex-shrink-0" />
</div>
<span class="text-white p-3 ml-3 mr-3">
Get the latest top Wall Street analyst ratings.
</span>
</div>
</a>
</div>
</aside>
</div>

View File

@ -1,9 +1,7 @@
<script lang="ts">
import { numberOfUnreadNotification } from "$lib/store";
import logo from "$lib/images/newsletter.png";
export let data;
let cloudFrontUrl = import.meta.env.VITE_IMAGE_URL;
</script>
<svelte:head>
@ -27,10 +25,6 @@
property="og:description"
content={`Get our free newsletter to be up to date with the current market.`}
/>
<meta
property="og:image"
content="https://stocknear-pocketbase.s3.amazonaws.com/logo/meta_logo.jpg"
/>
<meta property="og:type" content="website" />
<!-- Add more Open Graph meta tags as needed -->
@ -44,167 +38,67 @@
name="twitter:description"
content={`Get our free newsletter to be up to date with the current market.`}
/>
<meta
name="twitter:image"
content="https://stocknear-pocketbase.s3.amazonaws.com/logo/meta_logo.jpg"
/>
<!-- Add more Twitter meta tags as needed -->
</svelte:head>
<section
class="w-full max-w-4xl overflow-hidden m-auto min-h-screen pt-5 pb-40"
>
<!--
<div class="text-sm breadcrumbs ml-4">
<ul>
<li><a href="/" class="text-gray-300">Home</a></li>
<li class="text-gray-300">Newsletter</li>
</ul>
</div>
-->
<div
class="w-full max-w-4xl m-auto sm:bg-default sm:rounded-xl h-auto p-10 mt-3"
<div class="w-full max-w-7xl min-h-screen text-white m-auto mt-5">
<main
id="main"
class="mx-auto max-w-screen-lg space-x-20 p-6 md:flex md:p-10"
>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-10">
<!-- Start Column -->
<div>
<div class="flex flex-row justify-center items-center">
<h1
class="text-3xl sm:text-4xl text-white text-center font-bold mb-4"
>
Market Newsletter
</h1>
</div>
<div class="md:text-lg [&amp;_li]:mb-5 [&amp;_p]:mb-5">
<h1 class="mb-5 text-center text-3xl md:text-4xl font-bold">
Stay informed in just 2 minutes per day
</h1>
<p>
Market Bullets is a free newsletter that makes it super easy to keep up
with financial markets.
</p>
<p class="mt-4">
Our summaries are presented in short, bullet-point format, so reading
this newsletter will never feel like a chore.
</p>
<span
class="w-3/4 m-auto text-white text-md font-medium text-center flex justify-center items-center"
<p class="mt-4">
Let us read the news for you and filter out the noise, then we'll send
you the bullet points. Here's what you'll get:
</p>
<ul class="ml-8 list-disc mt-2">
<li>
Access the latest analyst reports, with key insights extracted using
AI.
</li>
<li>Get a quick snapshot of recent and upcoming earnings releases.</li>
<li>
Stay updated on major economic events with the potential to
significantly impact the market.
</li>
<li>
Benefit from accurate, up-to-date information sourced exclusively from
top-tier outlets.
</li>
</ul>
<p class="mt-4">
The newsletter is completely free, delivered to your inbox every morning
before the market opens, Monday to Friday.
</p>
{#if !data?.user}
<a
href="/register"
class="mt-10 btn bg-[#fff] border border-gray-600 sm:hover:bg-gray-300 transition duration-100 btn-md w-full rounded-md m-auto text-black font-semibold text-[1rem]"
>
Stay informed everyday to trade smarter
</span>
</div>
<!-- End Column -->
<!-- Start Column -->
<div class="relative m-auto mb-5 mt-5 sm:mb-0 sm:mt-0">
<svg
class="w-40 -my-5"
viewBox="0 0 200 200"
xmlns="http://www.w3.org/2000/svg"
>
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="5" result="glow" />
<feMerge>
<feMergeNode in="glow" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
</defs>
<path
fill="#1E40AF"
d="M57.6,-58.7C72.7,-42.6,81.5,-21.3,82,0.5C82.5,22.3,74.7,44.6,59.7,60.1C44.6,75.6,22.3,84.3,0,84.3C-22.3,84.2,-44.6,75.5,-61.1,60.1C-77.6,44.6,-88.3,22.3,-87.6,0.7C-86.9,-20.8,-74.7,-41.6,-58.2,-57.7C-41.6,-73.8,-20.8,-85.2,0.2,-85.4C21.3,-85.6,42.6,-74.7,57.6,-58.7Z"
transform="translate(100 100)"
filter="url(#glow)"
/>
</svg>
<div class="z-1 absolute top-0 left-8">
<img
class="w-32"
src={cloudFrontUrl + "/assets/newsletter_logo.png"}
alt="logo"
loading="lazy"
/>
</div>
</div>
<!-- End Column -->
<span class="text-[1rem] sm:text-lg">Sign Up</span>
</a>
{/if}
</div>
</div>
<div
class="bg-default sm:mt-10 sm:rounded-xl border-t sm:border hover:border-slate-700 border-gray-600 pb-10"
>
<div
class="text-white w-5/6 sm:w-full m-auto sm:m-0 text-center sm:text-start font-bold text-2xl flex justify-center sm:justify-start items-center pt-10 sm:ml-10"
>
Stay informed in just 2 minutes per day
<div class="hidden md:block">
<img
src={logo}
class="w-auto max-w-[300px] h-fit"
alt="Morning bullets preview"
/>
</div>
<span
class="text-white w-5/6 sm:w-full m-auto sm:m-0 text-center sm:text-start font-medium text-[1rem] sm:text-lg flex justify-center sm:justify-start items-center pt-7 sm:pt-4 pb-10 sm:pb-5 sm:ml-10"
>
Get super simple bullet-point summaries keep up with the market.
</span>
<ol
class="list-disc pl-7 text-white text-[1rem] sm:text-lg pb-5 ml-3 sm:ml-10"
>
<li class="w-11/12">
A quick overview of the most active stocks the past 24h.
</li>
<li class="pt-3 w-11/12">
Concise, easy-to-read bullet points highlighting key market
developments, significant earnings and other important news.
</li>
<li class="pt-3 w-11/12">
We rely exclusively on reliable, current information from top-tier
sources.
</li>
</ol>
<span
class="text-white w-96 sm:w-11/12 m-auto sm:m-0 text-center sm:text-start text-[1rem] sm:text-lg flex justify-center sm:justify-start items-center pt-7 sm:pt-4 pb-5 sm:pb-5 sm:ml-10"
>
Receive our free newsletter in your inbox every weekday morning, before
the market opens, from Monday to Friday.
</span>
{#if !data?.user}
<a
class="w-96 mt-6 m-auto flex m-auto justify-center items-center m-auto btn text-white bg-[#fff] sm:hover:bg-gray-300 transition duration-150 ease-in-out group"
href="/register"
>
Get Newsletter
<span
class="tracking-normal group-hover:translate-x-0.5 transition-transform duration-150 ease-in-out"
>
<svg
class="w-4 h-4"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
><g transform="rotate(90 12 12)"
><g fill="none"
><path
d="M24 0v24H0V0h24ZM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035c-.01-.004-.019-.001-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427c-.002-.01-.009-.017-.017-.018Zm.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093c.012.004.023 0 .029-.008l.004-.014l-.034-.614c-.003-.012-.01-.02-.02-.022Zm-.715.002a.023.023 0 0 0-.027.006l-.006.014l-.034.614c0 .012.007.02.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01l-.184-.092Z"
/><path
fill="white"
d="M13.06 3.283a1.5 1.5 0 0 0-2.12 0L5.281 8.939a1.5 1.5 0 0 0 2.122 2.122L10.5 7.965V19.5a1.5 1.5 0 0 0 3 0V7.965l3.096 3.096a1.5 1.5 0 1 0 2.122-2.122L13.06 3.283Z"
/></g
></g
></svg
>
</span>
</a>
{/if}
<!--
<form method="POST" class="flex flex-col items-center space-y-2 w-5/6 sm:pt-8 ml-auto mr-auto">
<Input
type="email"
id="email"
label=""
placeholder="Enter your email address"
value={form?.data?.email ?? ''}
required={true}
errors=''
/>
<div class="w-full sm:w-5/6 max-w-lg m-auto pb-5">
<button type="submit" class="py-3 bg-[#fff] text-white sm:hover:bg-gray-300 w-full rounded-md m-auto font-bold text-md">
Subscribe
</button>
</div>
</form>
-->
</div>
</section>
</main>
</div>