
    H5hWU              	          d Z ddlmZmZmZmZmZmZmZm	Z	 ddl
Z
ddlZddlZddlZddlmZ ddlZddlZddlmZ ej&                  j)                  e
j&                  j+                  e
j&                  j-                  e
j&                  j/                  e            d             ddlmZmZ  eedd	
      Zde_        ej>                  d        Z e
j&                  j+                  e
j&                  j-                  e
j&                  j/                  e            d      Z! e
jD                  e!d       i Z#d Z$d Z%ejM                  d      d        Z'ejM                  ddg      d        Z(ejM                  d      d        Z)ejM                  d      d        Z*ejM                  d      d        Z+ejM                  d      d        Z,ejM                  d       d!        Z-ejM                  d"      d#        Z.ejM                  d$dg      d%        Z/ejM                  d&      d'        Z0ejM                  d(dg      d)        Z1ed*k(  r7 e2e
jf                  ji                  d+d,            Z5ejm                  d-e5d.       yy)/z
Tailwind Site Rebuilder Web Application
---------------------------------------
A web interface for analyzing websites and creating blueprints for Tailwind CSS rebuilds.
    )Flaskrender_templaterequestredirecturl_forflashjsonifysend_from_directoryN)urlparse)datetimelib)create_simulationSiteRebuilderstatic	templates)static_foldertemplate_foldertailwind_rebuilder_secret_keyc                  .    dt        j                         iS )Nnow)r   r        8/home/stella.sw7ft.com/public_html/site_rebuilder/app.py
inject_nowr      s    8<<>""r   sitesT)exist_okc                     | j                  d      sd| z   } t        |       }|j                  }|j                  d      r|dd }t        j                  dd|      }|| fS )z&Extract a clean domain name from a URLzhttp://https://r   zwww.   Nz[^\w\-]_)
startswithr   netlocresub)url
parsed_urldomainclean_domains       r   get_domain_from_urlr*   &   sk     >>123 #JF   66*c62Lr   c                    	 | |dddt        j                          dt        <   fd} |dd       t        j                  j	                  t
        |      } |dd	       t        | |        |d
d       dt           d<   t        j                          t           d<   |t           d<   y# t        $ r:}dt           d<   dt        |       t           d<   dt           d<   Y d}~yd}~ww xY w)z%Run the analysis in a separate threadrunningr   Starting analysis...)r&   r(   statusprogressmessage
start_timec                 6    | t            d<   |t            d<   y )Nr0   r/   )active_analyses)r0   r/   
session_ids     r   update_progressz%run_analysis.<locals>.update_progressG   s!    5<OJ'	26>OJ'
3r   zFetching content...
   zAnalyzing website...   zProcessing complete!d   	completedr.   completion_time
output_dirfailedzError: r0   r/   N)	timer3   ospathjoin	SITES_DIRr   	Exceptionstr)r&   r(   r4   r5   r;   es     `   r   run_analysisrE   :   s     4-))+'

#	? 	-r2 WW\\)V4
 	.3#z*.40;
#H-9=
#$564>
#L1 408
#H-3:3q6(1C
#I.23
#J/4s   B(B, ,	C/50C**C//c            	         g } t         j                  j                  t              rOt        j                  t              }|D ]0  }t         j                  j                  t        |      }t         j                  j                  |      sHt         j                  j                  |d      }t         j                  j                  |      s	 t        |dd      5 }t        j                  |      }|j                  di       j                  dd      }|j                  di       j                  d|      }|j                  di       j                  d	d      }	| j                  ||||	d
       ddd       3 | j                  d d       t        d|       S # 1 sw Y   -xY w# t        $ r}
t        d| d|
        Y d}
~
d}
~
ww xY w)zHome page with URL input formrebuild_context.jsonrutf-8encoding	site_infor&    titleanalyzed_at)r(   r&   rO   rP   NzError loading context for : c                 &    | j                  dd      S )NrP   rN   )get)xs    r   <lambda>zindex.<locals>.<lambda>|   s    aeeM2&> r   T)keyreversez
index.html)analyzed_sites)r>   r?   existsrA   listdirr@   isdiropenjsonloadrS   appendrB   printsortr   )rX   domainsr(   
domain_dircontext_filefdatar&   rO   rP   rD   s              r   indexrg   ^   s~    N	ww~~i **Y' 	JFi8Jww}}Z(!ww||J8NO77>>,/J!,gF !#'99Q<D"&((;";"?"?r"JC$(HH["$=$A$A'6$RE*.((;*C*G*GWY*ZK*11*0'*)./:	3 	J, >M<GG%  % J :6("QCHIIJs1   F#BF+F#F 	F##	G,GGz/analyzePOST)methodsc                     t         j                  j                  dd      j                         } | s t	        dd       t        t        d            S t        |       \  }}| dt        t        j                                }t        j                  t        |||f      }d|_        |j                          t        t        d	|
            S )z(Handle URL submission and start analysisr&   rN   Please enter a valid URLerrorrg   r!   targetargsTanalysis_status)r4   )r   formrS   stripr   r   r   r*   intr=   	threadingThreadrE   daemonstart)r&   r(   full_urlr4   analysis_threads        r   analyzerz      s     ,,

5"
%
+
+
-C('2())*3/FH81S-./J  &&
+O "OG-*EFFr   z/analysis_status/<session_id>c                     | t         vr t        dd       t        t        d            S t         |    }|d   dk(  rt        t        d|d               S t	        d	|| 
      S )z!Show analysis status and progressAnalysis session not foundrl   rg   r.   r9   view_resultsr(   )r(   zanalysis_status.html)analysisr4   )r3   r   r   r   r   r4   r~   s     r   rp   rp      sf     (*G4())z*H[(x7IJKK1HQ[\\r   z#/api/analysis_progress/<session_id>c                 |    | t         vrt        ddd      dfS t         |    }t        |d   |d   |d   |d   d	      S )
z6API endpoint to get analysis progress for AJAX updatesrl   r|   r.   r0     r.   r/   r0   r(   )r.   r/   r0   r(   )r3   r	   r   s     r   analysis_progressr      sl     (3
   	
 z*H8$Z(I&8$	  r   z/results/<domain>c                 r   t         j                  j                  t        |       }t         j                  j	                  |      s#t        d|  d       t        t        d            S t         j                  j                  |d      }t         j                  j	                  |      s#t        d|  d       t        t        d            S 	 t        |dd      5 }t        j                  |      }d	d	d	       d
vrlg |d
<   d|v rd
|d   v r|d   d
   D ]P  }d|v s|d   st        j                  j                  d      }| d|  d|d    |d<   |d
   j                  |       R nwt        j                  j                  d      }|d
   D ]P  }d|v s|d   s|d   j                  d      r| |d    |d<   /|d   j                  d      rD| d|d    |d<   R t!        d| |      S # 1 sw Y   xY w# t"        $ r6}t        dt%        |       d       t        t        d            cY d	}~S d	}~ww xY w)z"Show analysis results for a domainNo analysis found for rl   rg   rH   Analysis results not found for rI   rJ   rK   Nimagescontent
local_pathrF   z/site_content/srcr   zresults.htmlr(   context Error loading analysis results: )r>   r?   r@   rA   rY   r   r   r   r\   r]   r^   r   url_rootrstripr_   r"   r   rB   rC   )r(   rc   rd   re   r   imgsite_urlrD   s           r   r}   r}      s=    i0J77>>*%&vh/9())77<<
,BCL77>>,'/x8'B())"*,g6 	#!iilG	# 7" "GH G#GI4F(F"9-h7 6C#s*s</@#*#3#3#:#:3#?(0zxq\IZH[%\E
)0056 ''..s3Hx( @C<CJ5z,,S1(0z#e*%>E
 Z223JK(0z3u:,%?E
@ ~&,'.0 	07	# 	#>  *0Q97C())*sU   
G7 G+.+G7 G7  A1G7 G7 5G7 G7 +G40G7 7	H6 +H1+H61H6z'/site_content/<domain>/<path:file_path>c                     d|v ryt         j                  j                  |      }t         j                  j                  |      }t	        t         j                  j                  t        | |      |      S )zServe site content filesz..)zAccess deniedi  )r>   r?   dirnamebasenamer
   r@   rA   )r(   	file_path	directoryfilenames       r   site_contentr      sU     y# 	*Iww	*Hrww||IvyI8TTr   z/ai_prompt/<domain>c                    t         j                  j                  t        |       }t         j                  j	                  |      s#t        d|  d       t        t        d            S t         j                  j                  |d      }t         j                  j	                  |      s#t        d|  d       t        t        d            S 	 t        |dd      5 }t        j                  |      }d	d	d	       t        d
|       S # 1 sw Y   xY w# t        $ r6}t        dt        |       d       t        t        d            cY d	}~S d	}~ww xY w)zAI prompt builder interfacer   rl   rg   rH   r   rI   rJ   rK   Nzai_prompt_builder.htmlr   r   )r>   r?   r@   rA   rY   r   r   r   r\   r]   r^   r   rB   rC   )r(   rc   rd   re   r   rD   s         r   ai_prompt_builderr      s    i0J77>>*%&vh/9())77<<
,BCL77>>,'/x8'B())
*,g6 	#!iilG	# 7&,'.0 	0	# 	#  *0Q97C())*s6   
D D.D D	D 	E+E
E
Ez/website_builderc                      t        d      S )zGWebsite builder interface - analyze multiple sites and show layout datazwebsite_builder.html)r   r   r   r   website_builderr     s     122r   z/website_builder/analyzec            	         t         j                  j                  dd      j                         } | st	        ddd      dfS t        |       \  }}t        j                  j                  t        |      }t        j                  j                  |d      }t        j                  j                  |      r	 t        |dd	
      5 }t        j                  |      }ddd       |j                  di       j                  d|      |j                  di       j                  d|      |j                  di       j                  dd      |j                  di       j                  dd      |j                  di       j                  dg       dd|v r|j                  di       ndd}t	        d|d      S d| dt!        t#        j"                                }	t%        j&                  t(        |||	f      }
d|
_        |
j-                          t	        d|	||dd       S # 1 sw Y   CxY w# t        $ r&}t	        ddt        |       d      dfcY d}~S d}~ww xY w)!z@Handle URL submission for website builder and return layout datar&   rN   rl   rk   r     rH   rI   rJ   rK   NrM   rO   layoutnormalized_widthr   normalized_heightsectionswidthheightr   asrr(   r&   rO   r   r   successr.   rf   z!Error loading existing analysis:   wb_r!   rm   T	analyzingr-   )r.   r4   r(   r&   r0   )r   rq   rS   rr   r	   r*   r>   r?   r@   rA   rY   r\   r]   r^   rB   rC   rs   r=   rt   ru   rE   rv   rw   )r&   r(   rx   rc   rd   re   r   layout_datarD   r4   ry   s              r   website_builder_analyzer     sJ    ,,

5"
%
+
+
-C1
   	
 +3/FH i0J77<<
,BCL	ww~~l#	lC': 'a))A,'
 !{{;377xH ["599'6J$[[26::;MqQ%kk(B7;;<OQRS 'Hb 9 = =j" M
 27'1Aw{{5"-t
K ##   6(!C		$4#56
#**FJ/
 "&!$-
  	M' '*  	!>s1vhG   	s7   3H% HCH% H"H% %	I.I	IIz*/api/website_builder_progress/<session_id>c           	         | t         vrt        ddd      dfS t         |    }|d   dk(  rI|d   }t        j                  j	                  t
        |      }t        j                  j	                  |d      }	 t        |d	d
      5 }t        j                  |      }ddd       |j                  di       j                  d|d         |j                  di       j                  d|      |j                  di       j                  dd      |j                  di       j                  dd      |j                  di       j                  dg       dd|v r|j                  di       ndd}t        d|d      S t        |d   |d   |d   d      S # 1 sw Y   xY w# t        $ r&}t        ddt        |       d      dfcY d}~S d}~ww xY w)z9API endpoint to get analysis progress for website builderrl   r|   r   r   r.   r9   r(   rH   rI   rJ   rK   NrM   r&   rO   r   r   r   r   r   r   r   r   r   r   r   r/   r0   )r.   r/   r0   )r3   r	   r>   r?   r@   rA   r\   r]   r^   rS   rB   rC   )	r4   r~   r(   rc   rd   re   r   r   rD   s	            r   website_builder_progressr   W  s    (3
   	
 z*H[((#WW\\)V4
ww||J0FG	lC': 'a))A,'
 !{{;377xO ["599'6J$[[26::;MqQ%kk(B7;;<OQRS 'Hb 9 = =j" M
 27'1Aw{{5"-t
K %#   x( ,	*
  	;' '*  	!=c!fXF   	s7   5F FCF FF 	G!G<GGz/api/generate_promptc            	      ^	   t         j                  } | j                  dd      }| j                  dg       }|r|st        ddd      dfS t        j
                  j                  t        |      }t        j
                  j                  |d      }t        j
                  j                  |      st        dd	d      d
fS 	 t        |dd      5 }t        j                  |      }ddd       dd   d    d}d|v rF|dz  }|d|d   d    dz  }|dz  }d|v r$|dz  }|d   d   D ]  }|d|d    d|d    dz  } |dz  }d |v rh|d!z  }|d"z  }|d#   d    }	|d$z  }|	d%   dd& D ]  }
|d|
 dz  } |d'z  }|	d(   dd& D ]  }
|d|
 dz  } |d)z  }|	d*   dd& D ]  }
|d|
 dz  } |dz  }d+|v r|d,z  }|d#   d+   }|d-   r|d.|d-   d/    dz  }|d0z  }|d1   j                         D ]8  \  }}|j                  d2d3      }|j                  d4d3      }|d| d| d5| dz  }: |d6|d7   d8   d2    d9|d7   d8   d4    d:z  }d;|v rd;|v r|d<z  }d(|d;   v rd(|v r|d=z  }d1|d;   d(   v r>|d;   d(   d1   }t        d>d?      D ]$  }d@| }||v s||   s|d| d||   d/    dz  }& dA|d;   d(   v r<|dBz  }|d;   d(   dA   ddC D cg c]  }|d(   	 }}|d5j                  |      z  }|dz  }|dz  }dD|d;   v rdD|v r|dEz  }|d;   dD   ddC }|D ]o  }|j                  ddF      }d}|dFk(  r3dG|j                  dHd       dI}dJ|v r.|dK|j                  dJdL       z  }ndM|j                  dNdL       }|d| dO| dz  }q |dz  }dD|v rdD|v r|dPz  }t        |dD         dCkD  r|dD   ddC n|dD   }t        |      D ]V  \  }}|j                  ddF      }|j                  dHdQ|d>z          }|j                  dRd      }|d| dO| dz  }|dS| dTz  }X t        |dD         dCkD  r|dUt        |dD         dCz
   dVz  }|dz  }|dWz  }|dXz  }|dYz  }|dZz  }|d[z  }t        d\|d]      S # 1 sw Y   xY wc c}w # t        $ r&}t        dd^t!        |       d      d_fcY d}~S d}~ww xY w)`z0Generate an AI prompt based on selected elementsr(   rN   selected_elementsrl   zMissing required datar   r   rH   zAnalysis results not foundr   rI   rJ   rK   Nz=Create a Tailwind CSS implementation of a website similar to rM   r&   z.

r   z
## Layout
z- Overall width: r   zpx
z:- Use a responsive design with Tailwind's container class
r   z- Include these sections:
z  * typerQ   content_preview
colorsz
## Colors
zUse this color scheme:
designz- Background colors:

background   z- Text colors:
textz- Accent colors:
accent
typographyz## Typography
fontsz- Font family: r   z- Heading styles:
headingsfontSizedefault
fontWeightz, z- Body text: body	paragraph z

r   z## Content
z- Include these text elements:
   r    h
navigationz  * Navigation items:    r   zA- Include placeholder images with these dimensions and contexts:
regularzalt: 'alt'
parent_tagz, in divzbackground image in elementz image: z:- Use these images (access or save them from these URLs):
zImage r   z    Alt text: "z"
z	  * Plus z more images available
z## Implementation Notes
z3- Use Tailwind CSS utility classes for all styling
zH- Make the design fully responsive using Tailwind's responsive prefixes
zK- Implement a mobile-friendly navigation that collapses on smaller screens
z<- Use semantic HTML5 elements for proper document structure
r   )r.   promptzError generating prompt: r   )r   r]   rS   r	   r>   r?   r@   rA   rY   r\   r^   itemsrangelen	enumeraterB   rC   )rf   r(   r   rc   rd   re   r   r   sectionr   colorr   headingstylesizeweightr   levelrV   item	nav_itemsimage_sampler   img_typecontext_infoidximg_altimg_srcrD   s                                r   generate_promptr     sX    <<DXXh#F!4b9*.
   	
 i0J77<<
,BCL77>>,'3
   	
O,g6 	#!iilG	# QQXYdQefkQlPmmrs ((m#F)'(*;<N*O)PPTUUFSTF ..77&x0< WGWV_$5R@Q8R7SSUVVFW dNF ((m#F00FX&x0F ..F-bq1 +Dr**+ ((F+ +Dr**+ **F)"1- +Dr**+ dNF ,,''F *<8J'"OJw,?,B+C2FF++F",Z"8">">"@ ?yyY7<;D	D6F82>>?
 j&8&Ej&Q%RRST^_eTfgrTs  uA  UB  TC  CG  H  HF I1B$Bn$F ++:K0K<< !3F!;;&y1&9*EH!&q! I !%k(?x}"SEHSM!4D3ER&HHFI  79#5f#==66F:A):LV:TUa:bcede:f g$f gI gdii	22FdNF$ 79--(>O2O^^  'y1(;BQ?' HC"wwvy9H#%L9,)/r0B/C1'E'3.(eCGGL%4P3Q,RRL)=cggiQV>W=X'YXJh|nBGGFH $ 7"x3D'DWW 9<GH<M8NQR8Rwx0!4X_`hXi ), 7 ?HC"wwvy9H!ggevc!eW-=>G!ggeR0GXJhwirBBF 0	>>F? wx()A-	#gh.?*@1*D)EE]^^F$ 	--HH]]``QQ
  	K	# 	#\ !hx  23q6(;
   	sP   =Q= Q+!F,Q= Q= 3Q= Q8FQ= +Q50Q= =	R,R'!R,'R,__main__PORTi  z0.0.0.0)hostportdebug)7__doc__flaskr   r   r   r   r   r   r	   r
   r>   r]   sysr$   urllib.parser   rt   r=   r   r?   r_   r@   r   abspath__file__analyzerr   r   __name__app
secret_keycontext_processorr   rA   makedirsr3   r*   rE   routerg   rz   rp   r   r}   r   r   r   r   r   r   rs   environrS   r   runr   r   r   <module>r      s   j i i 	  
 	 !    RWW__RWW__X-FGO P 5HHkJ0 # # GGLL)BCWM	 I % ("4H 3H HB :x(G )G* *+] ,] 01 2  0*  0*d 45
U 6
U  !* "*4 3 3 %x8? 9?B 782 92h !F84d 5dL zrzz~~fd+,DGGTG2 r   