diff --git a/components/src/rrf.js b/components/src/rrf.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e02d77f659e34b826e67b57d35596200eefd1f6
--- /dev/null
+++ b/components/src/rrf.js
@@ -0,0 +1,90 @@
+	import * as THREE from 'three';
+
+
+	// rrf rack
+	export function rrf(width=800, height=2500, depth=600) {
+		const rrf_rackObject = new THREE.Object3D();
+	
+		const bluematerial = new THREE.MeshLambertMaterial({color: 0x0053d9});
+		const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff});
+		const target = new THREE.MeshLambertMaterial({color: 0xfbe928});
+		const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d});
+		const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363});
+		const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0});
+		const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424});		
+		
+		//rack
+		const rrgeometry = new THREE.BoxGeometry(width, height, depth);
+		const rrmesh = new THREE.Mesh(rrgeometry, silvermaterial);
+		rrmesh.position.set( 0, 0 , -10);
+		rrf_rackObject.add(rrmesh);		
+		
+		//front yellow target
+		const Ftarget = new THREE.BoxGeometry(2, 90, 500);
+		const Ftargetmesh = new THREE.Mesh(Ftarget, target);
+		Ftargetmesh.position.set( -451, 1200 , -15);
+		rrf_rackObject.add(Ftargetmesh);		
+		//Rear yellow target
+		const Rtarget = new THREE.BoxGeometry(2, 90, 500);
+		const Rtargetmesh = new THREE.Mesh(Rtarget, target);
+		Rtargetmesh.position.set( 401, 1200 , -15);
+		rrf_rackObject.add(Rtargetmesh);				
+		
+		//edge le	
+		const llegeometry = new THREE.BoxGeometry(width-750, height, depth-550);
+		const llemesh = new THREE.Mesh(llegeometry, materialGreyDark);
+		llemesh.position.set( -425, 0 , -285);
+		rrf_rackObject.add(llemesh);
+		
+		//edge re		
+		const lregeometry = new THREE.BoxGeometry(width-750, height, depth-550);
+		const lremesh = new THREE.Mesh(lregeometry, materialGreyDark);
+		lremesh.position.set( -425, 0 , 265);
+		rrf_rackObject.add(lremesh);		
+
+		//edge ue		
+		const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50);
+		const luemesh = new THREE.Mesh(luegeometry, materialGreyDark);
+		luemesh.position.set( -425, 1225 , -7);
+		rrf_rackObject.add(luemesh);		
+
+		//edge de		
+		const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50);
+		const ldemesh = new THREE.Mesh(ldegeometry, materialGreyDark);
+		ldemesh.position.set( -425, -1230 , -7);
+		rrf_rackObject.add(ldemesh);				
+
+		
+		//drawer 1
+		const libera1geometry = new THREE.BoxGeometry(10, 200, 600);
+		const libera1geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium);
+		libera1geometrymesh.position.set( -400, 900 , -10);
+		rrf_rackObject.add(libera1geometrymesh);		
+		
+		//drawer 2
+		const libera2geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium);
+		libera2geometrymesh.position.set( -400, 600 , -10);
+		rrf_rackObject.add(libera2geometrymesh);				
+		
+		//drawer 3
+		const libera3geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium);
+		libera3geometrymesh.position.set( -400, 300 , -10);
+		rrf_rackObject.add(libera3geometrymesh);			
+		
+		//drawer 4
+		const libera4geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium);
+		libera4geometrymesh.position.set( -400, 0 , -10);
+		rrf_rackObject.add(libera4geometrymesh);			
+		
+		//drawer 5
+		const libera5geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium);
+		libera5geometrymesh.position.set( -400, -300 , -10);
+		rrf_rackObject.add(libera5geometrymesh);			
+		
+		//drawer 6
+		const libera6geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium);
+		libera6geometrymesh.position.set( -400, -600 , -10);
+		rrf_rackObject.add(libera6geometrymesh);	
+		
+		return rrf_rackObject;
+	}