Tech Stack

React + Vite

SSA Framework using Vite as the build tool. Quick and efficient.

Django

Python based backend framework for robust APIs. Authentication, ORM, database management.

TailwindCSS

Utility based CSS framework for rapid UI development.

PostgreSQL

Relational database for structured data storage for CRUD ops.

Project Journey

Automating Reddit Stock Discussions and News Sentiment Analysis with CRON Jobs and NLP

Being into finance and investing, I wanted to create a platform that tracks major ETFs and individual stocks in the S&P 500. This platform would also use a Natural Language Processing (NLP) model to analyze related news articles and provide sentiment analysis.

Code Highlights

1 2const chartConfig = { 3 VTI: { label: "VTI", color: "hsl(var(--chart-1))" }, 4 IVV: { label: "IVV", color: "hsl(var(--chart-2))" }, 5 QQQ: { label: "QQQ", color: "hsl(var(--chart-3))" }, 6 SPY: { label: "SPY", color: "hsl(var(--chart-4))" }, 7 VOO: { label: "VOO", color: "hsl(var(--chart-5))" }, 8}; 9 10 const getColor = (etfSymbol) => { 11 const colors = { 12 VTI: "var(--color-chart-1)", 13 IVV: "var(--color-chart-2)", 14 QQQ: "var(--color-chart-3)", 15 SPY: "var(--color-chart-4)", 16 VOO: "var(--color-chart-5)", 17 }; 18 return colors[etfSymbol] || colors.VTI; 19 }; 20 21 return ( 22 <Card className="w-full"> 23 <CardHeader className="pb-2"> 24 <CardTitle className="text-lg">{etf}</CardTitle> 25 </CardHeader> 26 <CardContent className="h-48 p-0 pb-4"> 27 <ChartContainer config={chartConfig} className="h-full w-full"> 28 <LineChart 29 data={data} 30 margin={{ left: 0, right: 0, top: 5, bottom: 0 }} 31 width={400} 32 height={192}> 33 <CartesianGrid 34 vertical={false} 35 strokeDasharray="3 3" 36 strokeOpacity={0.2} 37 /> 38 <XAxis 39 dataKey="date" 40 tickLine={false} 41 axisLine={false} 42 tickMargin={8} 43 tickFormatter={(value) => value?.slice(2) || ""} 44 fontSize={11} 45 tickCount={4} 46 /> 47 <ChartTooltip 48 cursor={false} 49 content={ 50 <ChartTooltipContent 51 hideLabel 52 formatter={(value) => [ 53 `${parseFloat(value).toFixed(2)}`, 54 "Price", 55 ]} 56 /> 57 } 58 /> 59 <Line 60 dataKey="price" 61 type="linear" 62 stroke={getColor(etf)} 63 strokeWidth={2.5} 64 dot={{ r: 0 }} 65 activeDot={{ r: 5, strokeWidth: 0 }} 66 connectNulls 67 isAnimationActive={false} 68 /> 69 </LineChart> 70 </ChartContainer> 71 </CardContent> 72 </Card> 73 ); 74}