Skip to content

Instantly share code, notes, and snippets.

// src/App.js
import React, { useState, useEffect, useRef, useMemo } from "react";
import { useLocation } from "react-router-dom";
import L from "leaflet";
import "leaflet.heat";
import { MapContainer, TileLayer, Circle, useMap, GeoJSON } from "react-leaflet";
import { io } from "socket.io-client";
import { supabase } from "./supabaseClient";
import "leaflet/dist/leaflet.css";
import "./App.css";
// src/App.js
import React, { useState, useEffect, useRef, useMemo } from "react";
import { useLocation } from "react-router-dom";
import L from "leaflet";
import "leaflet.heat";
import { MapContainer, TileLayer, Circle, useMap } from "react-leaflet";
import { io } from "socket.io-client";
import { supabase } from "./supabaseClient";
import "leaflet/dist/leaflet.css";
// server.js
require("dotenv").config();
const express = require("express");
const cors = require("cors");
const http = require("http");
const { Server } = require("socket.io");
const pool = require("./db"); // your pg Pool instance from db.js
const app = express();
/* App.css — full merged stylesheet
- pure-flex layout so map and sidebar match heights
- only sidebar scrolls internally
- feed list fills the card
- create accordion and topic spotlight view
- feed descriptions truncated to a single-line preview
- full-width Engage button in spotlight
- topic list: no bullets and left padding matches right side
*/
// src/App.js
import React, { useState, useEffect, useRef, useMemo } from "react";
import { useLocation } from "react-router-dom";
import L from "leaflet";
import "leaflet.heat";
import { MapContainer, TileLayer, Circle, useMap } from "react-leaflet";
import { io } from "socket.io-client";
import { supabase } from "./supabaseClient";
import "leaflet/dist/leaflet.css";
/* App.css — full merged stylesheet
- pure-flex layout so map and sidebar match heights
- only sidebar scrolls internally
- feed list fills the card
- create accordion and topic spotlight view
- feed descriptions truncated to a single-line preview
- full-width Engage button in spotlight
- topic list: no bullets and left padding matches right side
*/
/* App.css — full merged stylesheet
- pure-flex layout so map and sidebar match heights
- only sidebar scrolls internally
- feed list fills the card
- create accordion and topic spotlight view
- feed descriptions truncated to a single-line preview
- full-width Engage button in spotlight
- topic list: no bullets and left padding matches right side
*/
// src/App.js
import React, { useState, useEffect, useRef, useMemo } from "react";
import { useLocation } from "react-router-dom";
import L from "leaflet";
import "leaflet.heat";
import { MapContainer, TileLayer, Circle, useMap } from "react-leaflet";
import { io } from "socket.io-client";
import { supabase } from "./supabaseClient";
import "leaflet/dist/leaflet.css";
// src/App.js
import React, { useState, useEffect, useRef, useMemo } from "react";
import { useLocation } from "react-router-dom";
import L from "leaflet";
import "leaflet.heat";
import { MapContainer, TileLayer, Circle, useMap } from "react-leaflet";
import { io } from "socket.io-client";
import { supabase } from "./supabaseClient";
import "leaflet/dist/leaflet.css";
// src/App.js
import React, { useState, useEffect, useRef, useMemo } from "react";
import { useLocation } from "react-router-dom";
import L from "leaflet";
import "leaflet.heat";
import { MapContainer, TileLayer, Circle, useMap } from "react-leaflet";
import { io } from "socket.io-client";
import { supabase } from "./supabaseClient";
import "leaflet/dist/leaflet.css";