PortfolioPortfolio
Full-Stack Developer...

Detailed Description

This project is a detailed Sixt.com clone focused on UI precision and seamless interactions. Built with React and TailwindCSS.

Code Examples

Server main page
import express from "express";
import passport from "passport";
import cookieParser from "cookie-parser";
import expressSession from "express-session";
import cors from "cors";

import "./config/db";
import "./config/auth-strategy";

import authRoutes from "./routes/auth";
import userRoutes from "./routes/user";
import rentRoutes from "./routes/rent";
import getPage from "./controllers/get";
import reviewRoutes from "./routes/review";
import favoriteRoutes from "./routes/favorite";
import categoryRoutes from "./routes/category";
import locationRoutes from "./routes/location";
import reservationRoutes from "./routes/reservation";
import stripeRoutes from "./routes/stripe";
import webhookRoutes from "./routes/webhook";

const app = express();
app.set("trust proxy", 1);

const PORT = process.env.PORT || 3000;
const BASE_URL = process.env.BASE_URL || 'http://localhost:$ {PORT}';
const production = process.env.NODE_ENV === "production";
const allowedOrigins = [process.env.CLIENT_URL, "http://localhost:7777"];

app.use(
  cors({
    origin: (origin, callback) => {
      if (!origin || allowedOrigins.includes(origin)) {
        callback(null, true);
      } else {
        callback(new Error("Not allowed by CORS"));
      }
    },
    credentials: true,
  })
);


app.use(express.json());

app.use(cookieParser());
app.use(
  expressSession({
    secret: process.env.SESSION_SECRET!,
    resave: false,
    saveUninitialized: false,
    cookie: {
      maxAge: 1000 * 60 * 60 * 24 * 7,
      secure: !!production,
      sameSite: production ? "none" : "lax",
      httpOnly: !!production,
    },
  })
);

app.use(passport.initialize());
app.use(passport.session());

app.use("/public", express.static("./public"));

app.get("/", getPage);
app.use("/auth", authRoutes);
app.use("/users", userRoutes);
app.use("/locations", locationRoutes);
app.use("/categories", categoryRoutes);
app.use("/rents", rentRoutes);
app.use("/reservations", reservationRoutes);
app.use("/reviews", reviewRoutes);
app.use("/favorites", favoriteRoutes);
app.use("/stripe", stripeRoutes);
app.use("/webhook/stripe", webhookRoutes);

app.listen(PORT, () => {
  console.log('Hasanali's Server is running on $ {BASE_URL}');
});
hasanaliasadov@gmail.comhasanaliasadov@gmail.com