Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/

The crawler subdirectory was the only active project. Moving it to the
repo root simplifies paths and removes the unnecessary nesting. The
vqa/ and immoweb/ directories were legacy/unused and have been removed.

Updated .drone.yml, .gitignore, .claude/ docs, and skills to reflect
the new flat structure.
This commit is contained in:
Viktor Barzin 2026-02-07 23:01:20 +00:00
parent e2247be700
commit eafbc1ac52
No known key found for this signature in database
GPG key ID: 0EB088298288D958
221 changed files with 70 additions and 146140 deletions

View file

@ -0,0 +1,45 @@
// Map utility functions
/**
* Deep clone an object using JSON serialization
*/
export function clone<T>(obj: T): T {
return JSON.parse(JSON.stringify(obj));
}
/**
* Calculate the value at a given percentile in a sorted array
* @param arr Sorted array of numbers
* @param p Percentile (0-1)
*/
export function percentile(arr: number[], p: number): number {
if (arr.length === 0) return 0;
if (typeof p !== 'number') throw new TypeError('p must be a number');
if (p <= 0) return arr[0];
if (p >= 1) return arr[arr.length - 1];
const index = arr.length * p;
const lower = Math.floor(index);
const upper = lower + 1;
const weight = index % 1;
if (upper >= arr.length) return arr[lower];
return arr[lower] * (1 - weight) + arr[upper] * weight;
}
/**
* Convert percentage-based color stops to value-based color stops
* @param colorStopsPerc Array of [percentage, color] tuples
* @param min Minimum value
* @param max Maximum value
*/
export function calculateColorStops(
colorStopsPerc: [number, string][],
min: number,
max: number
): [number, string][] {
return colorStopsPerc.map(([perc, color]) => [
min + (perc * (max - min)) / 100,
color,
]);
}