Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
23 views19 pages

Frontend Project

Uploaded by

bhotosooty
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views19 pages

Frontend Project

Uploaded by

bhotosooty
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 19

Let's start with building the frontend step by step.

Here's a detailed
implementation plan for the requested features:

1. Set Up the Frontend

1. Bootstrap React App:

2. npx create-react-app finance-tracker

3. cd finance-tracker

4. Install Required Libraries:

5. npm install react-router-dom axios chart.js bootstrap

6. Folder Structure: Create a logical structure:

7. src/

8. ├── components/

9. │ ├── LandingPage.js

10. │ ├── Login.js

11. │ ├── Signup.js

12. │ ├── Navbar.js

13. │ ├── Home.js

14. │ ├── TransactionHistory.js

15. │ ├── AddTransaction.js

16. │ ├── Reports.js

17. │ ├── ChatBuddy.js

18. │ └── Profile.js

19. ├── App.js

20. ├── index.js

21. ├── api/

22. │ └── api.js # Axios configuration for API calls

23. ├── styles/

24. │ ├── App.css

25. │ └── Components.css


26. └── context/ # Optional for state management

27. Set Up Routing: Modify src/App.js to define routes:

28. import React from 'react';

29. import { BrowserRouter as Router, Routes, Route } from


'react-router-dom';

30. import LandingPage from './components/LandingPage';

31. import Login from './components/Login';

32. import Signup from './components/Signup';

33. import Home from './components/Home';

34.

35. const App = () => (

36. <Router>

37. <Routes>

38. <Route path="/" element={<LandingPage />} />

39. <Route path="/login" element={<Login />} />

40. <Route path="/signup" element={<Signup />} />

41. <Route path="/home" element={<Home />} />

42. </Routes>

43. </Router>

44. );

45.

46. export default App;

2. Implement Features

2.1 Landing Page

A simple introduction to the app with navigation to login or signup.

LandingPage.js:

import React from 'react';

import { Link } from 'react-router-dom';


import './LandingPage.css';

const LandingPage = () => (

<div className="landing-container">

<h1>Welcome to Personal Finance Tracker</h1>

<p>Manage your income, expenses, and savings effectively.</p>

<Link to="/login"><button className="btn">Login</button></Link>

<Link to="/signup"><button
className="btn">Signup</button></Link>

</div>

);

export default LandingPage;

2.2 Login Page

Login.js:

import React, { useState } from 'react';

import { useNavigate } from 'react-router-dom';

import axios from 'axios';

const Login = () => {

const [email, setEmail] = useState('');

const [password, setPassword] = useState('');

const navigate = useNavigate();

const handleLogin = async (e) => {

e.preventDefault();

try {

const response = await axios.post('/api/auth/login', { email,


password });
localStorage.setItem('token', response.data.token);

navigate('/home');

} catch (error) {

alert('Invalid credentials');

};

return (

<div className="login-container">

<h2>Login</h2>

<form onSubmit={handleLogin}>

<input

type="email"

placeholder="Email"

value={email}

onChange={(e) => setEmail(e.target.value)}

/>

<input

type="password"

placeholder="Password"

value={password}

onChange={(e) => setPassword(e.target.value)}

/>

<button type="submit">Login</button>

</form>

</div>

);

};
export default Login;

2.3 Signup Page

Signup.js:

import React, { useState } from 'react';

import axios from 'axios';

const Signup = () => {

const [form, setForm] = useState({

name: '',

email: '',

password: '',

});

const handleSignup = async (e) => {

e.preventDefault();

try {

await axios.post('/api/auth/signup', form);

alert('Account created successfully. Please login.');

} catch (error) {

alert('Signup failed');

};

return (

<div className="signup-container">

<h2>Signup</h2>

<form onSubmit={handleSignup}>

<input
type="text"

placeholder="Name"

onChange={(e) => setForm({ ...form, name: e.target.value })}

/>

<input

type="email"

placeholder="Email"

onChange={(e) => setForm({ ...form, email: e.target.value })}

/>

<input

type="password"

placeholder="Password"

onChange={(e) => setForm({ ...form, password: e.target.value })}

/>

<button type="submit">Signup</button>

</form>

</div>

);

};

export default Signup;

2.4 Home Page

Navbar.js:

import React from 'react';

import { Link } from 'react-router-dom';

const Navbar = () => (

<nav>
<Link to="/home">Home</Link>

<Link to="/transactions">Transactions</Link>

<Link to="/reports">Reports</Link>

<Link to="/profile">Profile</Link>

<Link to="/chat">Chat Buddy</Link>

</nav>

);

export default Navbar;

Home.js:

import React from 'react';

import Navbar from './Navbar';

const Home = () => (

<div>

<Navbar />

<h1>Welcome to the Dashboard</h1>

{/* Add quick summaries or links here */}

</div>

);

export default Home;

2.5 Transaction History with Filters and Categorization

TransactionHistory.js:

import React, { useState, useEffect } from 'react';

import axios from 'axios';

const TransactionHistory = () => {


const [transactions, setTransactions] = useState([]);

const [filter, setFilter] = useState('');

useEffect(() => {

axios.get('/api/transactions')

.then(response => setTransactions(response.data))

.catch(error => console.error(error));

}, []);

const filteredTransactions = transactions.filter(tx =>

tx.category.toLowerCase().includes(filter.toLowerCase())

);

return (

<div>

<h2>Transaction History</h2>

<input

type="text"

placeholder="Filter by category"

value={filter}

onChange={(e) => setFilter(e.target.value)}

/>

<ul>

{filteredTransactions.map(tx => (

<li key={tx.id}>

{tx.date} - {tx.category} - ${tx.amount} ({tx.type})

</li>

))}

</ul>
</div>

);

};

export default TransactionHistory;

2.6 Add Transaction

AddTransaction.js:

// Refer to the `TransactionForm` provided earlier in the conversation.

2.7 Reports (Charts)

Use Chart.js for visualizations. You can display spending trends and
income-expense comparisons.

Reports.js:

// Will add sample charts in the next step!

2.8 Chat with Buddy

Integrate LangChain or Llama. I’ll provide the AI implementation details


when you’re ready for this feature.

Would you like to start with the provided steps, or should I expand on a
specific section?

Here’s the expanded code for all mentioned pages, including basic CSS
styling and session management using localStorage to maintain the user’s
session. The session management ensures that users remain logged in
across page reloads.

1. Landing Page

LandingPage.js:

import React from "react";


import { Link } from "react-router-dom";

import "./LandingPage.css";

const LandingPage = () => (

<div className="landing-container">

<h1>Welcome to Personal Finance Tracker</h1>

<p>Manage your income, expenses, and savings effectively.</p>

<div className="landing-buttons">

<Link to="/login">

<button className="btn">Login</button>

</Link>

<Link to="/signup">

<button className="btn">Signup</button>

</Link>

</div>

</div>

);

export default LandingPage;

LandingPage.css:

.landing-container {

text-align: center;

margin-top: 50px;

.landing-container h1 {

font-size: 2.5rem;

margin-bottom: 20px;

}
.landing-container p {

font-size: 1.2rem;

margin-bottom: 30px;

.landing-buttons .btn {

margin: 10px;

padding: 10px 20px;

font-size: 1rem;

border: none;

border-radius: 5px;

background-color: #007bff;

color: white;

cursor: pointer;

transition: background-color 0.3s;

.landing-buttons .btn:hover {

background-color: #0056b3;

2. Login Page

Login.js:

import React, { useState } from "react";

import { useNavigate } from "react-router-dom";

import axios from "axios";

import "./Login.css";
const Login = () => {

const [email, setEmail] = useState("");

const [password, setPassword] = useState("");

const navigate = useNavigate();

const handleLogin = async (e) => {

e.preventDefault();

try {

const response = await axios.post("/api/auth/login", { email, password


});

localStorage.setItem("token", response.data.token); // Save token in


localStorage

navigate("/home");

} catch (error) {

alert("Invalid credentials. Please try again.");

};

return (

<div className="login-container">

<h2>Login</h2>

<form onSubmit={handleLogin}>

<input

type="email"

placeholder="Email"

value={email}

onChange={(e) => setEmail(e.target.value)}

/>

<input

type="password"
placeholder="Password"

value={password}

onChange={(e) => setPassword(e.target.value)}

/>

<button type="submit">Login</button>

</form>

</div>

);

};

export default Login;

Login.css:

.login-container {

max-width: 400px;

margin: 50px auto;

text-align: center;

padding: 20px;

border: 1px solid #ccc;

border-radius: 5px;

.login-container h2 {

font-size: 1.5rem;

margin-bottom: 20px;

.login-container form input {

width: 100%;

padding: 10px;
margin-bottom: 10px;

font-size: 1rem;

border: 1px solid #ccc;

border-radius: 5px;

.login-container form button {

width: 100%;

padding: 10px;

background-color: #007bff;

color: white;

font-size: 1rem;

border: none;

border-radius: 5px;

cursor: pointer;

transition: background-color 0.3s;

.login-container form button:hover {

background-color: #0056b3;

3. Signup Page

Signup.js:

import React, { useState } from "react";

import axios from "axios";

import "./Signup.css";

const Signup = () => {


const [form, setForm] = useState({ name: "", email: "", password: "" });

const handleSignup = async (e) => {

e.preventDefault();

try {

await axios.post("/api/auth/signup", form);

alert("Signup successful! You can now login.");

} catch (error) {

alert("Signup failed. Please try again.");

};

return (

<div className="signup-container">

<h2>Signup</h2>

<form onSubmit={handleSignup}>

<input

type="text"

placeholder="Name"

value={form.name}

onChange={(e) => setForm({ ...form, name: e.target.value })}

/>

<input

type="email"

placeholder="Email"

value={form.email}

onChange={(e) => setForm({ ...form, email: e.target.value })}

/>

<input
type="password"

placeholder="Password"

value={form.password}

onChange={(e) => setForm({ ...form, password: e.target.value })}

/>

<button type="submit">Signup</button>

</form>

</div>

);

};

export default Signup;

Signup.css:

.signup-container {

max-width: 400px;

margin: 50px auto;

text-align: center;

padding: 20px;

border: 1px solid #ccc;

border-radius: 5px;

.signup-container h2 {

font-size: 1.5rem;

margin-bottom: 20px;

.signup-container form input {

width: 100%;
padding: 10px;

margin-bottom: 10px;

font-size: 1rem;

border: 1px solid #ccc;

border-radius: 5px;

.signup-container form button {

width: 100%;

padding: 10px;

background-color: #28a745;

color: white;

font-size: 1rem;

border: none;

border-radius: 5px;

cursor: pointer;

transition: background-color 0.3s;

.signup-container form button:hover {

background-color: #218838;

4. Add Session Feature

Session Management:

1. Store the user token in localStorage upon login.

2. Create a PrivateRoute component to protect authenticated pages.

PrivateRoute.js:

import React from "react";


import { Navigate } from "react-router-dom";

const PrivateRoute = ({ children }) => {

const token = localStorage.getItem("token");

return token ? children : <Navigate to="/login" />;

};

export default PrivateRoute;

App.js: Update App.js to include PrivateRoute for protected pages.

import React from "react";

import { BrowserRouter as Router, Routes, Route } from "react-router-


dom";

import LandingPage from "./components/LandingPage";

import Login from "./components/Login";

import Signup from "./components/Signup";

import Home from "./components/Home";

import PrivateRoute from "./components/PrivateRoute";

const App = () => (

<Router>

<Routes>

<Route path="/" element={<LandingPage />} />

<Route path="/login" element={<Login />} />

<Route path="/signup" element={<Signup />} />

<Route path="/home" element={<PrivateRoute><Home


/></PrivateRoute>} />

</Routes>

</Router>

);
export default App;

The above includes:

 Pages with forms and routing.

 CSS for styling.

 Session management using localStorage.

Would you like me to expand more on additional features like transaction


history, reports, or chatbot integration?

You might also like